45 votes

À l'opposé d'une requête de jointure interne

quelqu'un peut-il m'aider à écrire sql pour un scénario comme celui-ci :

 Table 1

2 columns: ID, Name

Table 2

2 columns: ID, Name

Je veux qu'une requête affiche les noms de la table 1 qui ne figurent pas dans la table 2. Donc, filtrer tous les noms de la table 1 qui se trouvent dans la table 2 est la requête de résultat. Utilisez l'ID pour le filtrage et non le nom.

Cela m'aidera dans ce que j'essaye de faire. Merci d'avance

72voto

Andrew Points 14278
Select * from table1
left join table2 on table1.id = table2.id
where table2.id is null

34voto

Joe Stefanelli Points 72874

Cela devrait fonctionner mieux que la version left join...is null . Voir ici et ici pour des comparaisons.

 select t1.id, t1.name
    from table1 t1
    where not exists(select null from table2 t2 where t2.id = t1.id)

17voto

DForck42 Points 4421

Utiliser cette requête

 select
t1.*
from table1 t1
left outer join table2 t2
on t1.id=t2.id
where t2.id is null

cela fonctionne en joignant tout dans t1 à tout ce qui existe dans t2. la clause where filtre tous les enregistrements qui n'existent pas dans t2.

3voto

Matt Points 522
SELECT Table1.ID, Table1.Name, Table2.ID 
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.ID = Table2.ID 
WHERE Table2.ID IS NULL 

Je pense que ça devrait le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X