2016-11-17 83 views
1

如何排除多行如果行的一个满足条件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,并排除所有行,如果他们中的一个包含代码= 112233

在这个例子中,结果应该只显示该行:5/3/988933

回答

0

如果你w蚂蚁原始行,然后用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); 
1

戈登展示了如何通过的存在是为了做到这一点,提到了,但它也可以通过左侧的自做如下连接:

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 

虽然我不喜欢在使用,因为它是在这里提到的是你如何能做到这一点:

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字段不可能为空,因此您可以删除该语句,我将其放入以显示细微差别。

相关问题