我有两个表A和B,B中有一个来自A的外键,我想要做的是从A中删除所有它们在B中都没有出现的行,我执行以下查询,但是它是不起作用:

DELETE from A
WHERE  id_A
       not in (select DISTINCT(foreign_key_of_A_in_B) from B)


任何想法 ?

最佳答案

我的第一个建议是尝试使用not exists而不是not in

DELETE a FROM a
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.foreign_key_of_A_in_B = a.id_A);


如果子查询中的任何值为NOT IN,则NULL返回false或NULL。这就是定义运算符的方式。 NOT EXISTS具有更多预期行为。因此,如果子查询中有任何NULL值,则可以使用(即删除行),而NOT IN版本则无效。

我建议您在执行SELECT之前先尝试使用DELETE进行逻辑运算:

SELECT A.*
FROM A
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.foreign_key_of_A_in_B = A.id_A);

07-24 09:38
查看更多