Как найти пользователей без заказов через JOIN

Используйте LEFT JOIN и отберите строки, у которых ID присоединённого заказа равен NULL. Это отсутствие совпадения, а не заказ с пустым идентификатором.

Короткий ответ

Что ответить на собеседовании

Используйте LEFT JOIN и отберите строки, у которых ID присоединённого заказа равен NULL. Это отсутствие совпадения, а не заказ с пустым идентификатором.

Подробный разбор

Ответ с пояснениями

Условие

Есть users(id) и orders(id, user_id), где orders.id не допускает NULL. Получите пользователей без заказов без подзапроса.

Ответ

Используйте LEFT JOIN и отберите строки, у которых ID присоединённого заказа равен NULL. Это отсутствие совпадения, а не заказ с пустым идентификатором.

Запрос:

SELECT u.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;

Если искать отсутствие только оплаченных заказов, условие статуса нужно добавить в ON. Перенос его в WHERE может изменить внешнее соединение и потерять пользователей без совпадений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее