Вступить в клуб →
средняявопросSQL и модель данных

LEFT JOIN перестал возвращать клиентов без заказов

Нужен отчёт: все клиенты, а рядом — их оплаченные заказы, если такие есть. Клиенты без оплаченных заказов должны остаться в выборке.

SELECT c.id, c.name, o.id AS order_id
FROM clients c
LEFT JOIN orders o ON o.client_id = c.id
WHERE o.status = 'paid';

В результате клиенты без заказов пропали. Где ошибка?

  • Условие на правую таблицу в WHERE отбрасывает строки с NULL и превращает соединение во внутреннее; его нужно перенести в ON
  • Нужно заменить LEFT JOIN на RIGHT JOIN: тогда клиенты без оплаченных заказов сохранятся в выборке
  • Не хватает `GROUP BY c.id`: без группировки клиенты без заказов в результат не попадают
  • Дело в порядке таблиц: при LEFT JOIN ведущей считается правая таблица, поэтому `clients` нужно указать второй в запросе

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела