Есть три основных SQL-техники для поиска записей, которые есть в одной таблице, но отсутствуют в другой.
Оператор EXCEPT возвращает строки из первого запроса, которые не появляются в результате второго запроса.
SELECT id FROM table_a
EXCEPT
SELECT id FROM table_b;
Лучше всего подходит для простого сравнения множеств, но имей в виду, что он поддерживается не всеми базами данных (например, MySQL использует MINUS).
LEFT JOIN возвращает все строки из левой таблицы со значениями NULL там, где в правой таблице нет совпадений. Фильтрация по NULL изолирует записи без пары.
SELECT a.id
FROM table_a a
LEFT JOIN table_b b ON a.id = b.id
WHERE b.id IS NULL;
Это наиболее распространённый подход — хорошо работает при наличии правильных индексов.
Условие NOT EXISTS фильтрует строки, для которых подзапрос не нашёл соответствующей записи.
SELECT a.id
FROM table_a a
WHERE NOT EXISTS (
SELECT 1 FROM table_b b WHERE b.id = a.id
);
Этот подход часто предпочитают за читаемость — и он может быть эффективным, когда подзапрос останавливается на первом найденном совпадении.
EXCEPT — чистый синтаксис, но ограниченная поддержка со стороны баз данныхLEFT JOIN — наиболее универсальный и производительный при наличии индексовNOT EXISTS — наиболее читаемый, хорошо подходит для сложных условий сопоставленияОператор EXCEPT поддерживается во всех основных SQL базах данных, включая MySQL, что делает его самым универсальным решением для поиска записей в одной таблице, но не в другой.
Новый — ещё не проверен сообществом
Вы