在MySQL中使用LEFT JOIN和LIMIT进行DELETE

San*_*ago 10 mysql left-join

我正在尝试删除数据库中的孤立帖子并创建了此查询:

DELETE post.*
      FROM foro_post AS post
      LEFT JOIN foro_thread AS thread USING(threadid)
      WHERE thread.threadid IS NULL
Run Code Online (Sandbox Code Playgroud)

问题是我想限制,因为我的表有超过7,000,000条记录.

由于我无法使用LIMIT查询,我尝试了这个并且实际上有效,但我不确定它是否是一个有效的解决方案或者是否可以做得更好.

DELETE post.*
      FROM foro_post AS post
      LEFT JOIN foro_thread AS thread USING(threadid)
      WHERE thread.threadid IS NULL
      AND post.postid < 500

      // Where < 500 should be increasing as I delete records
Run Code Online (Sandbox Code Playgroud)

我怎样才能更有效地做到这一点?

Zan*_*ien 18

当您同时引用多个表时,不能LIMIT直接在DELETE中使用,但是您可以通过在子选择中包含要删除的内容来解决这个问题:

DELETE po 
FROM   foro_post po
JOIN   (
       SELECT    p.postid
       FROM      foro_post p
       LEFT JOIN foro_thread t ON p.threadid = t.threadid
       WHERE     t.threadid IS NULL
       ORDER BY  p.postid
       LIMIT     50
       ) pp ON po.postid = pp.postid
Run Code Online (Sandbox Code Playgroud)