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` нужно указать второй в запросе
