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

How to use EXISTS and NOT EXISTS in one query?

表 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  

现在我们可以使用以下查询找到表 2 中存在的 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 个 table 这些记录是否存在。在同一查询中使用另一个条件 NOT EXISTS ?

例如 Table3 只有 Table1_ID 列值 1 现在新的不存在查询应该给我结果 2,3,4,5

我试过 -

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)

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

条件:

NOT EXISTS (SELECT * FROM Table3)

...如果表 3 中有任何行,则始终为假,因此您的查询 returns 没有行。

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

SELECT Table1.Id
FROM Table1 AS Table1
WHERE EXISTS
    (
        SELECT 1 
        FROM Table2 AS Table2
        WHERE
            Table1.DemoID  = Table2.DemoID 
            AND Table2.IsTrue= 1
    )
    AND NOT EXISTS
    (
        SELECT 1
        FROM Table3
        WHERE
            <b>Table3.Table1_ID = Table1.Id</b> -- New
    );

演示:db<>fiddle