SQL JOIN трёх таблиц: состав заказов и товары
Цепочка JOIN должна отражать связи предметной области: заказ содержит позиции, а каждая позиция ссылается на товар. Сначала определите, какой объект соответствует строке результата.
INNER JOIN оставляет только найденные соответствия. LEFT JOIN сохраняет строки левой таблицы без пары. Выберите поведение по условию, а не по привычке: пустой заказ и товар без продаж — разные ситуации.
Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «SQL с нуля: бесплатный курс с практикой».
Состав заказов
Интернет-магазин хранит информацию о заказах, входящих в них позициях и товарах в трёх таблицах: orders, order_items и products. Иногда в базе оказываются товары, которые ни в один заказ не попали, а некоторые заказы не содержат ни одной позиции — такое бывает при черновых или отменённых записях.
Нужно получить детальный состав только тех заказов, у которых есть хотя бы одна позиция. Для каждой такой позиции верни order_id, название товара (title) и количество (quantity). Записи без соответствующих позиций — ни осиротевшие товары, ни пустые заказы — в результат не включаются.
Результат упорядочи сначала по order_id по возрастанию, а внутри одного заказа — по title по возрастанию. Если названия совпали, используй item_id по возрастанию как tie-breaker. Верните ровно три столбца в указанном порядке и не меняйте данные.
Пример
- Подготовка данных
INSERT INTO orders VALUES (101, '2024-01-10'), (102, '2024-02-15'), (103, '2024-03-01'); INSERT INTO products VALUES (10, 'Блокнот', 150), (11, 'Ручка', 50), (12, 'Ноутбук', 75000); INSERT INTO order_items VALUES (1, 101, 10, 2), (2, 101, 11, 1), (3, 102, 10, 3);
- Вывод
101|Блокнот|2 101|Ручка|1 102|Блокнот|3
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- INNER JOIN в SQL: сколько строк вернёт запрос
- JOIN и дубли строк: связь один-ко-многим или ошибка
- LEFT JOIN и сравнение с NULL: почему результат пустой
- SQL INNER JOIN: соединить заказы с именами клиентов
- Клиенты без заказов SQL: задача на LEFT JOIN и NULL
- SQL GROUP BY и SUM: задача на выручку по категориям
