Выбор ответа Junior Подзапросы и CTE обновлено
Скалярный подзапрос вернул две строки
Вопрос
У клиента 1 два заказа. Что произойдёт?
SELECT c.name,
(SELECT o.id FROM orders o WHERE o.customer_id = c.id) AS order_id
FROM customers c
WHERE c.id = 1;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: подзапрос вернул больше одной строки. Подзапрос в списке SELECT должен вернуть не больше одного значения.
Варианты ответа
- Подставится первый найденный заказ клиента
- Ошибка: подзапрос вернул больше одной строкиправильный ответ
- Подставится NULL, раз значение неоднозначно
- Строка клиента продублируется для каждого заказа
Разбор
Подзапрос в списке SELECT должен вернуть не больше одного значения. При двух строках PostgreSQL выдаёт ошибку «more than one row returned by a subquery used as an expression». «Первый найденный» он не подставляет, NULL подставляется, только если строк ноль, а размножение строк это поведение JOIN.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Подзапросы и CTE»
- Полный путь категории в дереве
- Клиенты, у которых все заказы оплачены
- Дни без продаж по регионам
- Цепочка руководителей вверх по дереву
- Дороже любой книги: ALL против MAX
- Категория с максимальной выручкой
- Два последних заказа каждого клиента через LATERAL
- Дороже среднего по своей категории