2016-11-17 4 views
1

Wie mehrere Zeilen auszuschließen, wenn eine der Zeilen der KonditionstabelleSQL - mehrere Zeilen, wenn eine der Zeilen die Bedingung erfüllt, schließen alle

Beispiel erfüllt:

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 

Jetzt möchte ich finden nur diese ID-s, die = 3 und verstehen sich inklusive aller Zeilen rOLE_ID hat, wenn einer von ihnen Code enthält = 112233

In diesem Beispiel zeigen die Ergebnisse dieser Zeile nur sollte: 5/3/988933

Antwort

0

wenn du w Ameise die ursprünglichen Reihen, dann verwenden exists oder 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); 
1

Gordon Ihnen gezeigt, wie es geht über EXISTS und erwähnt IN es kann aber auch über eine linke selbst erfolgen schließen, wie folgt:

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 

Und während ich mag zu IN nicht verwenden, da es hier erwähnt wurde, ist, wie Sie es tun könnte:

SELECT * 
FROM 
    Table 
WHERE 
    role_id = 3 
    AND id NOT IN (SELECT ID 
       FROM 
        Table 
       WHERE 
        code = 112233 
        and ID IS NOT NULL) 

Hinweis I die Zeile ID enthalten NOT NULL ist, weil, wenn Sie jemals vergleichen etwas zu IN (NULL) Sie werden nicht das gewünschte Ergebnis erhalten. In diesem Fall ist es unwahrscheinlich, dass ein ID-Feld jemals null ist, daher können Sie diese Aussage möglicherweise entfernen, um die Nuance anzuzeigen.

Verwandte Themen