繁体   English   中英

SQL:在子查询中使用多列进行过滤

[英]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反正:

我应该使用NOT IN,OUTER APPLY,LEFT OUTER JOIN,EXCEPT还是NOT EXISTS?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM