SQL - 多行,如果其中一行符合条件,则排除所有行

时间:2016-11-17 17:14:14

标签: sql

如果其中一行符合条件,如何排除多行

示例表:

  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

2 个答案:

答案 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)

如果您想要原始行,请使用existsin

select t.*
from t
where role_id = 3 and
      exists (select 1 from t t2 where t2.id = t.id and t2.code = 112233);