删除sql表中不对应的行

时间:2014-12-02 22:43:11

标签: mysql sql-server

我在这里找到一个删除一个表中的行的解决方案,该表与另一个具有where id条件的表相对应:

DELETE FROM MyTable1 WHERE id=1 AND NOT EXISTS (SELECT * FROM MyTable2 WHERE id=1)

但我有大约10000行,MyTable1中的Id不在MyTable2中,并且非常想要找出MyTable1中的Id与MyTable2中的ID不对应

如何在没有where id条件的情况下删除MyTable1中与MyTable2不对应的所有行?

3 个答案:

答案 0 :(得分:1)

这将删除MyTable1中MyTable2中不存在id的所有行。

DELETE FROM MyTable1 WHERE id NOT IN (SELECT id FROM MyTable2

答案 1 :(得分:1)

您也可以NOT EXISTS执行此操作。但是您的子查询应该是correlated sub-query

DELETE FROM MyTable1 A
WHERE  id = 1
       AND NOT EXISTS (SELECT 1
                       FROM   MyTable2 B
                       WHERE  A.id = B.id) 

答案 2 :(得分:0)

你可以加入id MyTable2并检查id是否为null,或者你可以创建一个约束来禁止删除table1中存在于table2中的id的行