MYSQL. SELECT, JOIN по таблицам, где данные второй таблицы не связаны с первой (SELECT JOIN WHERE DATA IS NOT EXIST)


Выборка данных по двум mysql таблицам. Вывести данные у которых отсутствует связь между таблицами (SELECT AND JOIN DATA WHERE COLUMN VALUE IS NOT EXIST).
Разбор выборки на примере таблиц с пользователями и публикациями. Нужно вывести список пользователей, которые не публиковали ни одной публикации.

Для примера я завел 2 таблицы в базе данных MySql.
Первая таблица будет содержать список пользователей.
Данная таблица состоит только из 2 колонок. Это:
  • id - autoincrement
  • login - Логин пользователя

Вторая таблица содержит список публикаций и состоит из 5 колонок.
  • id - autoincrement
  • title - Заголовок публикации
  • description - Краткое описание публикации
  • text - Полное содержание публикации
  • user_id - Идентификатор пользователя, который соответствует порядковому идентификатору пользователя в таблице users.

Данные колонки наполнены презентационными данными:
users:
MYSQL. SELECT, JOIN по таблицам, где данные второй таблицы не связаны с первой (SELECT JOIN WHERE DATA IS NOT EXIST)

posts:

И теперь делаем выборку по пользователям, которые не совершали ни одной публикации:
SELECT u.* FROM test.users u LEFT JOIN posts p ON p.user_id = u.id WHERE p.id IS NULL;

В данном запросе возвращаются данные из таблицы users и используем LEFT JOIN для связи с таблицей posts.
LEFT JOIN позволит вернуть данные, даже если их нет. И благодаря проверке на NULL вы можете вывести строки, у которых отсутствует соответствие.
Результат выполнения данного запроса:

В итоге мы получили список пользователей, которые не совершали ни одной публикации.
Данный запрос можно модифицировать под личные требования и выполнять необходимую выборку.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.