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)
任何的想法 ?
我的第一个建议是尝试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)
| 归档时间: |
|
| 查看次数: |
6836 次 |
| 最近记录: |