gpt4 book ai didi

mysql - 限制使用不在查询中检查的行 - SQL

转载 作者:行者123 更新时间:2023-11-29 11:41:47 24 4
gpt4 key购买 nike

所以我有两张 table 。 TableA 具有 350K 行,TableB 仅包含 TableA 应该具有的事件数据。所以我需要清除TableA中的旧数据。

如果表 A 不是那么大,这个查询会很好。

DELETE FROM TableA where MLS NOT IN (SELECT LIST_3 FROM TableB);

所以我需要做的是限制TableA中检查的行数。例如,我希望它检查 100 条记录,而不是检查 TableA 中的 350K 记录。

我不知道如何...这不起作用,因为它只限制删除的行数而不检查。它可能会检查 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 BYLIMIT 一起使用,但您最初的问题没有指定选择要查看的 100 行的方法为。

关于mysql - 限制使用不在查询中检查的行 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com