从任何联接表中不存在其他值的表中选择



如果任何联接的表中都不存在另一列值,我将尝试仅从Oracle中的表中检索ID。让我给你举个例子:

示例

如图所示,表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,因为所有联接的表的Status中都不包含值2。

非常感谢您的意见。

使用聚合

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)
);

最新更新