table1 (id, name) table2 (id, navn)
Forespørgsel:
SELECT name
FROM table2
-- that are not in table1 already
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Q: Hvad sker der her?
A: Begrebsmæssigt vælger vi alle rækker fra tabel1
, og for hver række forsøger vi at finde en række i tabel2
med den samme værdi for kolonnen navn
. Hvis der ikke findes nogen sådan række, lader vi bare tabel2
-delen af vores resultat være tom for den pågældende række. Derefter begrænser vi vores udvælgelse ved kun at vælge de rækker i resultatet, hvor den matchende række ikke findes. Endelig ignorerer vi alle felter i vores resultat undtagen kolonnen name
(den kolonne, vi er sikre på, at den findes, fra table1
).
Selv om det måske ikke er den mest performante metode i alle tilfælde, burde den fungere i stort set alle databasemaskiner nogensinde, der forsøger at implementere ANSI 92 SQL
Du kan enten gøre
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
eller
SELECT name
FROM table2
WHERE NOT EXISTS
(SELECT *
FROM table1
WHERE table1.name = table2.name)
Se dette spørgsmål for 3 teknikker til at opnå dette