【问题标题】:Select from table where another value doesn't exist in any of the joined tables从任何联接表中不存在另一个值的表中选择
【发布时间】:2021-08-18 20:58:35
【问题描述】:

我试图从 Oracle 中的表中检索 ID,仅当任何连接表中不存在另一个列值时。举个例子吧:

example

正如您在草图中看到的,表 A 通过 ID 连接到表 B。只有当任何加入的表 B 中的所有状态都不包含值 2 时,我才想从表 A 中获取 ID。

这是我的 SQL 语句:

SELECT ID FROM TABLE A
LEFT JOIN TABLE B
ON A.ID = B.REF_ID
WHERE B.STATUS NOT IN (2)

不幸的是,我仍然获得了所有 ID(这是有道理的),并且无法想出一种方法来仅检索连接表的 Status 列中没有特定值的 ID。因此,我只想获取 ID 1,因为所有连接表的状态中都不包含值 2。

非常感谢您的任何意见。

【问题讨论】:

    标签: sql oracle join select


    【解决方案1】:

    使用聚合

    SELECT ID
    FROM TABLE A LEFT JOIN
         TABLE B
         ON A.ID = B.REF_ID 
    GROUP BY A.ID
    HAVING SUM(CASE WHEN B.STATUS IN (2) THEN 1 ELSE 0 END) = 0;
    

    或者,只需使用NOT EXISTS

    SELECT A.ID
    FROM TABLE A
    WHERE NOT EXISTS (SELECT 1
                      FROM B
                      WHERE A.ID = B.REF_ID AND B.STATUS IN (2)
                     );
    

    【讨论】:

    • @no33mis 。 . .如果这回答了您的问题,您可以接受答案。
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2021-03-13
    • 1970-01-01
    • 2016-07-28
    • 2015-08-27
    相关资源
    最近更新 更多