2017-10-17 4 views
0

J'ai 2 tables. L'un est people avec le nom, numéro de sécurité sociale, etc. L'autre est cars avec ssn, marque, modèle, etc.SQL sélectionner où la valeur ne correspond pas

Comment pourrais-je aller sur la sélection de la table people où la colonne ssn ne correspond à aucun ssn de la cars tableau?

La table combinée a ssn, name, etc, carssn, carid et toute personne qui n'a pas de SSN sur la table cars a la valeur NULL pour ces 2 colonnes lorsque les tables sont jointes.

Répondre

4

J'utiliser not exists:

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

J'utiliserais not in:

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

Si vous souhaitez utiliser une jointure, comme décrit dans la question, l'utilisation is null:

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

Il est également possible d'utiliser ALL

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

si ssn dans cars est jamais NULL. Si ssn est parfois NULL que vous pouvez utiliser

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

Vous devriez vous inquiéter NULL s également en solution utilisant NOT IN