想象一下两个表(A和B):
A B
1 2
2 3
6 5
4 7
9 11
13
23
9
现在我想从A中删除B中不存在的记录,例如从A中删除1,6和4。
我最初的想法是你可以'否定'加入的结果。
答案 0 :(得分:6)
DELETE FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.id = B.id)
我假设这些列名为id
。
答案 1 :(得分:4)
NOT EXISTS
答案的替代方案:
DELETE FROM A WHERE id NOT IN (SELECT id FROM b);
再次,假设该列名为id
。
答案 2 :(得分:1)
您可以通过在外部联接的一侧查找NULL值来找到不匹配的记录,然后删除它们:
DELETE FROM A
WHERE id IN
(
SELECT A.id
FROM A
LEFT JOIN B
ON A.id = B.id
WHERE B.id IS NULL -- This means we only return unmatched A records
)
我喜欢这个的主要原因是你可以预先运行声明的SELECT
部分,以便检查你的工作。否则其他答案看起来更清晰。