Выбор ответа 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 должен вернуть не больше одного значения.

Варианты ответа

  1. Подставится первый найденный заказ клиента
  2. Ошибка: подзапрос вернул больше одной строкиправильный ответ
  3. Подставится NULL, раз значение неоднозначно
  4. Строка клиента продублируется для каждого заказа

Разбор

Подзапрос в списке SELECT должен вернуть не больше одного значения. При двух строках PostgreSQL выдаёт ошибку «more than one row returned by a subquery used as an expression». «Первый найденный» он не подставляет, NULL подставляется, только если строк ноль, а размножение строк это поведение JOIN.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.