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

LEFT JOIN с условием в WHERE потерял заказы без платежей

Задача: получить все заказы за день вместе со статусом платежа, включая заказы, по которым платежа ещё нет.

Вы написали запрос:

SELECT o.id, p.status
FROM orders o
LEFT JOIN payments p ON p.order_id = o.id
WHERE p.status = 'success';

Заказы без платежей в результат не попали.

Почему?

  • Левое соединение не сохраняет строки левой таблицы при отсутствии пары справа, для такой задачи нужен FULL JOIN
  • Порядок таблиц указан неверно: в левом соединении orders должна стоять справа от payments
  • Условие по правой таблице в WHERE отсекает строки с NULL и превращает соединение во внутреннее
  • Не хватает GROUP BY по o.id, без группировки строки без платежей схлопываются в пустоту

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

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

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

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