如果任何联接的表中都不存在另一列值,我将尝试仅从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)
);