table1 (id, name) table2 (id, name)
Запит:
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: Що тут відбувається?
A: Концептуально, ми вибираємо всі рядки з таблиці1
і для кожного рядка намагаємося знайти рядок в таблиці2
з таким же значенням для стовпця назва
. Якщо такого рядка немає, ми просто залишаємо частину table2
нашого результату порожньою для цього рядка. Потім ми обмежуємо наш вибір, вибираючи тільки ті рядки в результаті, де відповідний рядок не існує. Нарешті, ми ігноруємо всі поля нашого результату, окрім стовпчика name
(того, в існуванні якого ми впевнені, з table1
).
Хоча це може бути не найефективніший метод, можливий у всіх випадках, він повинен працювати в основному в кожному механізмі баз даних, який коли-небудь намагався реалізувати ANSI 92 SQL.
Ви можете зробити або
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
або
SELECT name
FROM table2
WHERE NOT EXISTS
(SELECT *
FROM table1
WHERE table1.name = table2.name)
Дивіться це питання про 3 методи для досягнення цього
Це чиста теорія множин, якої можна досягти за допомогою операції "мінус".
select id, name from table1
minus
select id, name from table2