Sql 在WHERE子句中使用字段的组合
我有两个具有类似关键字段的表:Sql 在WHERE子句中使用字段的组合,sql,Sql,我有两个具有类似关键字段的表: TABLE_A (KEY1, KEY2, KEY3, KEY4, A, B, C ...) TABLE_B (KEY1, KEY2, KEY3, KEY4, A, B, C ...) 我想从表_B中删除记录,其中表_A中不存在键集。因此,类似于: DELETE FROM TABLE_B WHERE (KEY1, KEY2, KEY3, KEY4) NOT IN ( SELECT KEY1, KEY2, KEY3, KEY4 FROM TABLE_A ) 最
TABLE_A (KEY1, KEY2, KEY3, KEY4, A, B, C ...)
TABLE_B (KEY1, KEY2, KEY3, KEY4, A, B, C ...)
我想从表_B中删除记录,其中表_A中不存在键集。因此,类似于:
DELETE FROM TABLE_B
WHERE (KEY1, KEY2, KEY3, KEY4)
NOT IN ( SELECT KEY1, KEY2, KEY3, KEY4 FROM TABLE_A )
最好的方法是什么?它会是某种类型的连接吗?我对SQL有基本的了解,但是当涉及到这些类型的函数时,它开始变得模糊起来
谢谢 一个子选择就可以了
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
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
);
您的SQL是有效的标准SQL:1992语法,是一种很好的方法
当然,并非所有SQL产品都支持该语法,例如,and支持该语法,不单击这些链接了解详细信息。这显然是无效的SQL-不,事实上,某些数据库完全按照您编写该语法的方式接受该语法。如果您可以添加有关正在使用的数据库的信息,这会有所帮助。您正在从错误的表中删除错误的记录。该问题要求从表_B中删除表_A中不存在的记录。您正在从表_B中删除表_A中确实存在的记录。不,我不这样认为。左侧连接选择所有行,而where则过滤掉A中不存在的行。@hvd-否,这是右侧。WHERE u为NULL称为排除联接,它将完全执行OP所需的操作。@StefanMai您编辑了答案,使其正确,这很好,但我对原始答案进行了评论。@JoelCoehoorn我评论的原始答案已从中删除了一个。。。内部连接。。。