【问题标题】:How to use EXISTS and NOT EXISTS in one query?如何在一个查询中使用 EXISTS 和 NOT EXISTS?
【发布时间】:2019-01-12 14:14:47
【问题描述】:

表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

但我也想检查第三张表这些记录是否存在。在同一个查询中使用一个不存在的条件?

例如 Table3Table1_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

【问题讨论】:

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


    【解决方案1】:

    条件:

    NOT EXISTS (SELECT * FROM Table3)
    

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

    你需要添加一个谓词来显示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
                Table3.Table1_ID = Table1.Id -- New
        );
    

    演示:db<>fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 2013-08-14
      • 1970-01-01
      • 2016-07-22
      • 2021-08-29
      • 2013-02-13
      • 1970-01-01
      相关资源
      最近更新 更多