如何在一个查询中使用EXISTS和NOT EXISTS?

时间:2018-08-05 09:58:00

标签: sql-server sql-server-2012 exists

表1

Id Name  DemoID
1  a      33
2  b      44
3  c      33
4  d      33
5  e      44

表2

Id DemoID IsTrue
11  33     1  
12  44     1

表3

Id Table1_ID
11  1  

现在,我们可以使用以下查询找到Table2中存在的DemoID-

SELECT Table1.Id FROM Table1 as Table1
WHERE EXISTS
(
   SELECT * FROM Table2 as Table2
   WHERE Table1.DemoID  = Table2.DemoID AND Table2.IsTrue= 1
)

结果-1,2,3,4,5

但是我也想在第3个表中检查那些记录是否存在。在同一查询中使用另一个条件NOT EXISTS?

例如Table3的{​​{1}}列值只有1,现在新的不存在查询应该给我结果Table1_ID

我尝试过-

2,3,4,5

但是它没有给我任何记录。它应该给我剩下的记录是2,3,4,5

1 个答案:

答案 0 :(得分:7)

条件:

SELECT Table1.Id FROM Table1 as Table1
    WHERE EXISTS
    (
       SELECT * FROM Table2 as Table2
       WHERE Table1.DemoID  = Table2.DemoID AND Table2.IsTrue= 1
    )
AND NOT EXISTS (SELECT * FROM Table3)

...如果Table3中有任何行,则始终为false,因此您的查询不返回任何行。

您需要添加一个谓词以显示Table3行如何限定,如下面的粗体所示:

NOT EXISTS (SELECT * FROM Table3)

演示:db<>fiddle