2017-10-17 2 views
0

Ich habe 2 Tabellen. Eine davon ist people mit Namen, SSN, usw. Die andere sind cars mit ssn, Marke, Modell, usw.SQL wählen, wo Wert nicht übereinstimmt

Wie würde ich mich über von der people Tabelle auswählen, wo die ssn Spalte nicht mit SSN aus dem überein cars Tabelle?

Die kombinierte Tabelle hat ssn, name, etc, carssn, carid, und jeder, der kein ssn auf der cars Tabelle hat, hat NULL für diese 2 Spalten, wenn die Tabellen verbunden sind.

Antwort

4

würde ich not exists verwenden:

select p.* 
from people p 
where not exists (select 1 from cars c where c.ssn = p.ssn); 
0

ich not in verwenden würde:

select * 
from people 
where ssn not in (select ssn from cars); 

Wenn Sie eine Verknüpfung verwenden möchten, wie in der Frage beschrieben, verwenden is null:

select p.* 
from people p 
left join cars c using (ssn) 
where c.ssn is null; 
0

Es ist auch möglich, ALL zu verwenden

select * 
from people 
where ssn != ALL(select ssn from cars); 

wenn ssn in cars ist nie NULL. Wenn ssn manchmal NULL ist, als Sie

select * 
from people 
where ssn != ALL(select ssn from cars where ssn IS NOT NULL); 

verwenden könnten Sie sollten über NULL s auch in Lösung sorgen mit NOT IN

Verwandte Themen