В MySQL существует несколько способов получения записей, которые существуют в одной таблице, но отсутствуют в другой. В этой статье будут рассмотрены пять различных методов достижения этой цели с использованием разговорного языка и примеров кода. В конце концов, у вас будет множество методов на выбор при работе с этой распространенной ситуацией с базой данных.
Метод 1: использование предложения NOT IN
Один из самых простых методов — использовать предложение NOT IN в SQL-запросе. Это предложение позволяет вам указать подзапрос, который извлекает записи из одной таблицы и исключает их из другой. Вот пример:
SELECT *
FROM table1
WHERE id NOT IN (SELECT id FROM table2);
Метод 2: использование LEFT JOIN
Другой подход — использовать LEFT JOIN для объединения двух таблиц, а затем отфильтровать записи со значениями NULL во второй таблице. Этот метод хорошо работает, когда у вас есть общий столбец между таблицами. Вот пример:
SELECT table1.*
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id IS NULL;
Метод 3: использование предложения NOT EXISTS
Предложение NOT EXISTS — еще один эффективный способ получить записи из одной таблицы, которых нет в другой. Он проверяет отсутствие соответствующей записи во второй таблице. Вот пример:
SELECT *
FROM table1
WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.id = table2.id);
Метод 4: использование оператора EXCEPT (MySQL 8.0+)
Если вы используете MySQL 8.0 или более позднюю версию, вы можете использовать оператор EXCEPT для получения записей, которые находятся в одной таблице, но отсутствуют в другой. Оператор EXCEPT возвращает отдельные строки из левой таблицы, которых нет в правой таблице. Вот пример:
SELECT *
FROM table1
EXCEPT
SELECT *
FROM table2;
Метод 5: использование подзапроса с предложением WHERE NOT EXISTS
Наконец, вы можете использовать подзапрос с предложением WHERE NOT EXISTS для достижения желаемого результата. Этот метод аналогичен методу 3, но имеет альтернативный синтаксис. Вот пример:
SELECT *
FROM table1
WHERE NOT EXISTS (
SELECT *
FROM table2
WHERE table1.id = table2.id
);
Получение записей, которые существуют в одной таблице MySQL, но отсутствуют в другой, можно выполнить различными методами. Используя предложение NOT IN, LEFT JOIN, NOT EXISTS, оператор EXCEPT (для MySQL 8.0+) или подзапросы, вы можете адаптировать свой подход к вашим конкретным требованиям. Поэкспериментируйте с этими методами и выберите тот, который лучше всего подходит для вашего случая использования.