web-dev-qa-db-fra.com

En face d'une requête de jointure interne

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

Table 1

2 columns: ID, Name

Table 2

2 columns: ID, Name

Je souhaite qu'une requête affiche les noms du tableau 1 qui ne figurent pas dans le tableau 2. Donc, filtrer tous les noms du tableau 1 qui figurent dans le tableau 2 est la requête de résultat. Utilisez l'ID pour le nom du filtrage. 

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

32
Nick LaMarca
Select * from table1
left join table2 on table1.id = table2.id
where table2.id is null
49
Andrew

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)
23
Joe Stefanelli

Utilisez 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 reliant tout dans t1 à tout ce qui existe dans t2. la clause where filtre tous les enregistrements qui n'existent pas dans le t2.

16
DForck42
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 cela devrait le faire.

3
Matt
SELECT * FROM table1
WHERE table2.id NOT IN (SELECT id FROM table2)
0
Mojgan Mazouchi