2016-11-17 37 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字段不可能爲空,因此您可以刪除該語句,我將其放入以顯示細微差別。

相關問題