Joindre des tables SQL Server

Je veux joindre deux tables mais je veux que le jeu de résultats montre seulement les matchs qui ne sont pas dans le bon côté.

Exemple:

LeftTable

  • leftID | PK
  • valeur |

RightTable

  • rightID | PK
  • leftID | FK

    select l.value

    de LeftTable l

    join RightTable r

    sur l.leftID = r.leftID

Je sais que cela ne me donnera pas ce que je veux, mais j'essaie juste de découvrir quels éléments dans le tableau de gauche n'apparaissent pas du bon côté en utilisant la relation de key étrangère leftID.

Des idées?

Que faire si nous faisons

select LT.value from LeftTable LT left outer join RightTable RT on LT.leftID = RT.leftID Where RT.leftId is null 

SO joint returnnera toutes les correspondances ainsi que les lignes qui sont à gauche mais pas à droite. Avec la clause where nous n'obtenons que les lignes pour lesquelles la table de droite à gauche est nulle.

Vous l'avez presque, juste quelques changements mineurs – la jointure devrait être une jointure gauche, pas une jointure [INNER], et vous devez seulement returnner les rangées où la table droite est manquante, c.-à-d. Que ses champs sont NULL:

 SELECT T1.value FROM LeftTable T1 LEFT JOIN RightTable T2 ON T1.leftID = T2.leftID WHERE T2.leftID IS NULL 

select * from LeftTable where leftID not in (select leftID from RightTable)

 SELECT LeftID FROM LeftTable LEFT OUTER JOIN RightTable ON LeftTable.LeftID = RightTable.LeftID WHERE RightTable.RightId IS NULL 

Une alternative exists , préférant utiliser where not in . La left outer join avec une vérification de l'état nul de la droite est probablement encore optimale.

 select left.* from LeftTable as left where not exists ( select * from RightTable as right where right.RightID = left.LeftID )