SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Q : Что здесь происходит?
A : Концептуально мы выбираем все строки из table1
, и для каждой строки мы пытаемся найти строку в table2
с тем же значением для столбца name
. Если такой строки нет, мы просто оставляем часть table2
нашего результата пустой для этой строки. Затем мы ограничиваем наш выбор, выбирая только те строки в результате, где соответствующая строка не существует. Наконец, мы игнорируем все поля из нашего результата, кроме столбца name
(который, как мы уверены, существует, начиная с table1
).
Хотя это может быть не самый производительный метод, возможный во всех случаях, он должен работать практически в каждом механизме баз данных, когда-либо пытающемся реализовать ANSI 92 SQL