Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie wählt man alle Datensätze aus einer Tabelle aus, die in einer anderen Tabelle nicht vorhanden sind?

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

F :Was passiert hier?

A :Konzeptionell wählen wir alle Zeilen aus table1 aus und für jede Zeile versuchen wir, eine Zeile in table2 zu finden mit demselben Wert für name Säule. Wenn es keine solche Zeile gibt, verlassen wir einfach die table2 Teil unseres Ergebnisses für diese Zeile leer. Dann schränken wir unsere Auswahl ein, indem wir nur die Zeilen im Ergebnis auswählen, in denen die übereinstimmende Zeile nicht vorhanden ist. Schließlich ignorieren wir alle Felder aus unserem Ergebnis mit Ausnahme von name Spalte (diejenige, von der wir sicher sind, dass sie existiert, aus table1 ).

Auch wenn es nicht in allen Fällen die leistungsfähigste Methode ist, sollte es in praktisch jeder Datenbank-Engine funktionieren, die jemals versucht, ANSI 92 SQL

zu implementieren