2017-08-30 46 views
0

我有两个数据库表。一张表来自WordPress(wp_post),其中包含我的WordPress网站的所有帖子。第二个表仅用于应用程序逻辑,并存储使用我的插件创建的帖子中的ID。SQL使用子查询删除大量条目

因此,在我的应用程序逻辑表中有大约70,000个ID,我想使用单个SQL语句删除所有帖子。这是我试过的语句:

DELETE FROM wp_posts WHERE ID in (SELECT post_id FROM wp_my_table WHERE post_id IS NOT NULL AND post_id > 0);

提交查询ALL的ID删除,但我的MySQL服务器响应的语句采用的时间太多量,并取消该语句的执行。是否有不同的方式来获得所有的ID和删除所有帖子?

我知道有一些WordPress的功能,如wp_delete_post等 - 但是当删除这些数量的帖子,它真的很慢。

+0

可以在选择的末尾添加“LIMIT 1000”,然后重复该操作并增加限制大小,直到完成全部或命中时间错误。 – Tigger

回答

2

你可以尝试删除联接:

DELETE t1 
FROM wp_posts t1 
INNER JOIN wp_my_table t2 
    ON t1.ID = t2.post_id 
WHERE 
    t2.post_id > 0 

你不应该需要对post_idNULL检查中wp_my_table表作为连接应该过滤掉这些记录。

+0

谢谢你!奇迹般有效。 – beeef