sql >> Database >  >> RDS >> Sqlserver

Hoe selecteer ik alle records uit de ene tabel die niet in een andere tabel voorkomen?

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

Q :Wat gebeurt hier?

A :Conceptueel selecteren we alle rijen uit table1 en voor elke rij proberen we een rij te vinden in table2 met dezelfde waarde voor de name kolom. Als zo'n rij niet bestaat, laten we gewoon de table2 gedeelte van ons resultaat leeg voor die rij. Vervolgens beperken we onze selectie door alleen die rijen in het resultaat te kiezen waar de overeenkomende rij niet bestaat. Ten slotte negeren we alle velden van ons resultaat, behalve de name kolom (degene waarvan we zeker weten dat die bestaat, uit table1 ).

Hoewel het misschien niet in alle gevallen de meest performante methode is, zou het in vrijwel elke database-engine moeten werken die ooit ANSI 92 SQL probeert te implementeren



  1. Begrijp groep per clausule in SQL Server - SQL Server / TSQL-zelfstudie, deel 130

  2. De huidige staat van open source back-upbeheer voor PostgreSQL

  3. De werkelijke MySQL-querytijd meten

  4. Rails Migration veranderende kolom om Postgres-arrays te gebruiken