[英]SQL : Filtering with multiple columns in a subquery
我想从一个表中选择所有行,这些行不存在于另一个表的ID列中。
例如我的Table1具有以下结构:
C1 C2 C3
-- -- --
1 A Z
2 B Y
3 C X
我的Table2看起来像:
D1 D2
-- --
1 A
2 Y
3 X
我的工作查询看起来像:
slect * from Table1
where (C2 NOT IN (Select D2 from Table2);
这工作正常,但是如果我想根据两列的组合进行过滤(即D1和D2,那么我不能将查询写为:
slect * from Table1
where ((C1,C2) NOT IN (Select (D1,D2) from Table2);
谁能帮助我纠正以上查询?
使用NOT EXISTS
:
SELECT t.* from Table1 t
WHERE NOT EXISTS
(
SELECT 1 FROM Table2 t2
WHERE t.C1 = t2.D1
AND t.C2 = t2.D2
)
结果:
C1 C2 C3
2 B Y
3 C X
这是一个演示: http : //sqlfiddle.com/#!3/81fdd/4/0
NOT EXISTS
具有lesss的所有主题比NOT IN
反正:
SELECT T1.*
FROM Table1 AS T1
LEFT JOIN Table2 AS T2
ON T2.D1 = T1.C1
AND T2.D2 = T1.C2
WHERE T2.D1 IS NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.