从表中删除行(另一个表)

Bra*_*UAR 1 mysql sql foreign-keys sql-delete

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

DELETE from A 
WHERE  id_A
       not in (select DISTINCT(foreign_key_of_A_in_B) from B)
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

Gor*_*off 7

我的第一个建议是尝试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);
Run Code Online (Sandbox Code Playgroud)

NOT IN返回 false 或者NULL如果子查询中的任何值是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);
Run Code Online (Sandbox Code Playgroud)