在WHERE子句中使用字段组合

时间:2012-02-14 20:22:10

标签: sql

我有两个具有相似关键字段的表:

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有基本的了解,但是当涉及到这些类型的函数时,它开始变得模糊。

谢谢!

3 个答案:

答案 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产品都不支持该语法,例如mySQLPostgreSQL支持SQL Server不支持(点击这些链接了解详情)。