所以我有2张桌子。具有35万行的TableA
和TableB
仅具有TableA
应该具有的活动数据。所以我需要清除TableA
中的旧数据。
如果Table A
不太大,此查询将非常有用。
DELETE FROM TableA where MLS NOT IN (SELECT LIST_3 FROM TableB);
因此,我需要做的是限制在
TableA
中检查的行数。而不是它检查TableA
中的350K记录,例如,我希望它检查100。我不知道怎么办...这行不通,因为它只限制删除的行数并且不检查。它可能会检查500行并删除100。我希望它能检查100行并删除,但是许多不在
TableB
中。DELETE FROM TableA where MLS NOT IN (SELECT LIST_3 FROM TableB) LIMIT 100;
最佳答案
如果TableA
具有主键,则可以执行以下操作:
DELETE a
FROM TableA a JOIN
(SELECT a2.id
FROM TableA a2
LIMIT 100 -- should have an order by with limit
) a2
ON a.id = a2.id
WHERE NOT EXISTS (SELECT 1 FROM TableB b WHERE b.List_3 = a.MLS);
笔记:
即使使用子查询,使用主键的联接也应该非常快。
我将
NOT IN
更改为NOT EXISTS
。当存在NULL
值时,后者具有更直观的行为。您应该始终将
ORDER BY
与LIMIT
一起使用,但是最初的问题并未指定选择要查找的100行的方式。关于mysql - 限制使用不在查询中检查的行-SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35672874/