我有两个具有相似关键字段的表:
TABLE_A (KEY1, KEY2, KEY3, KEY4, A, B, C ...)
TABLE_B (KEY1, KEY2, KEY3, KEY4, A, B, C ...)
我想从TABLE_B中删除TABLE_A中不存在键集的记录。所以,像:
DELETE FROM TABLE_B
WHERE (KEY1, KEY2, KEY3, KEY4)
NOT IN ( SELECT KEY1, KEY2, KEY3, KEY4 FROM TABLE_A )
最好的方法是什么?会是某种类型的加入吗?我对SQL有基本的了解,但是当涉及到这些类型的函数时,它开始变得模糊。
谢谢!
答案 0 :(得分:3)
DELETE b FROM TABLE_B b
LEFT JOIN TABLE_A a ON a.KEY1=b.KEY1 AND a.KEY2=b.KEY2...
WHERE a.SOMEID IS NULL
答案 1 :(得分:2)
子选择可以解决问题
DELETE FROM
TABLE_B B
WHERE
NOT EXISTS (SELECT *
FROM TABLE_A A
WHERE
A.KEY1 = B.KEY1 AND
A.KEY2 = B.KEY2 AND
A.KEY3 = B.KEY3 AND
A.KEY4 = B.KEY4
);
答案 2 :(得分:0)
您的SQL是有效的标准SQL:1992语法和一种好的方法。
当然,所有SQL产品都不支持该语法,例如mySQL和PostgreSQL支持SQL Server不支持(点击这些链接了解详情)。