Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment sélectionner tous les enregistrements d'une table qui n'existent pas dans une autre table ?

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

Q :Que se passe-t-il ici ?

A :Conceptuellement, nous sélectionnons toutes les lignes de table1 et pour chaque ligne nous essayons de trouver une ligne dans table2 avec la même valeur pour le name colonne. S'il n'y a pas une telle ligne, nous laissons simplement la table2 partie de notre résultat vide pour cette ligne. Ensuite, nous restreignons notre sélection en sélectionnant uniquement les lignes du résultat où la ligne correspondante n'existe pas. Enfin, nous ignorons tous les champs de notre résultat à l'exception du name colonne (celle dont nous sommes sûrs qu'elle existe, de table1 ).

Bien que ce ne soit pas la méthode la plus performante possible dans tous les cas, elle devrait fonctionner dans pratiquement tous les moteurs de base de données qui tentent d'implémenter ANSI 92 SQL