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 ?
R : 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 la colonne name. S’il n’y a pas de telle ligne, nous laissons simplement la portion table2 de notre résultat vide pour cette ligne. Ensuite, nous contraignons notre sélection en ne choisissant que les lignes du résultat où la ligne correspondante n’existe pas. Enfin, nous ignorons tous les champs de notre résultat sauf la colonne name (celle dont nous sommes sûrs qu’elle existe, provenant de table1).
Bien que ce ne soit pas forcément la méthode la plus performante 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.