如果其中一行符合条件,如何排除多行
示例表:
id/role_id/code
1/1/112233
1/2/221155
1/3/332233
5/1/323233
5/3/988933
6/1/389349
6/2/112233
6/3/232323
现在我想只查找这些id-s,其中role_id = 3并排除所有行,如果其中一行包含code = 112233
在此示例中,结果应仅显示此行:5/3/988933
答案 0 :(得分:1)
Gordon向您展示了如何通过EXISTS进行操作并提及IN,但也可以通过左自连接完成,如下所示:
SELECT t1.*
FROM
Table t1
LEFT JOIN Table t2
ON t1.id = t2.id
AND t2.code = 112233
WHERE
t1.role_id = 3
AND t2.id IS NULL
虽然我不想使用IN,因为这里提到的是你如何做到这一点:
SELECT *
FROM
Table
WHERE
role_id = 3
AND id NOT IN (SELECT ID
FROM
Table
WHERE
code = 112233
and ID IS NOT NULL)
注意我包含行ID IS NOT NULL,因为如果您将某些内容与IN(NULL)进行比较,则无法获得所需的结果。在这种情况下,ID字段可能永远不会为空,因此您可以删除该语句,我将其放入以显示细微差别。
答案 1 :(得分:0)
如果您想要原始行,请使用exists
或in
:
select t.*
from t
where role_id = 3 and
exists (select 1 from t t2 where t2.id = t.id and t2.code = 112233);