Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come selezionare tutti i record da una tabella che non esistono in un'altra tabella?

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

D :Cosa sta succedendo qui?

A :Concettualmente, selezioniamo tutte le righe da table1 e per ogni riga cerchiamo di trovare una riga in table2 con lo stesso valore per il name colonna. Se non esiste una tale riga, lasciamo semplicemente la table2 parte del nostro risultato è vuota per quella riga. Quindi limitiamo la nostra selezione selezionando solo quelle righe nel risultato in cui la riga corrispondente non esiste. Infine, ignoriamo tutti i campi del nostro risultato ad eccezione del name colonna (quella che siamo sicuri che esista, da table1 ).

Anche se potrebbe non essere il metodo più performante possibile in tutti i casi, dovrebbe funzionare praticamente in ogni motore di database che tenti di implementare ANSI 92 SQL