Запрос: SELECT u.name, last_order.* FROM users u, (SELECT * FROM orders WHERE user_id = u.id ORDER BY created_at DESC LIMIT 1) last_order. Заметьте: LATERAL не указан. Что произойдёт?

AЗапрос выполнится успешно — обычный подзапрос в FROM может ссылаться на внешние таблицы
BЗапрос вернёт ошибку: без LATERAL подзапрос в FROM не может ссылаться на u.id
CЗапрос выполнится, но подзапрос проигнорирует условие user_id = u.id и вернёт все заказы
DЗапрос выполнится, но вернёт только один заказ для всех пользователей вместо последнего для каждого
Правильный ответ. Без ключевого слова LATERAL подзапрос в FROM не может ссылаться на другие таблицы из того же FROM — запрос вернёт ошибку ссылки на u.id.

Разбор

В стандартном SQL подзапрос в FROM (derived table) изолирован от внешнего контекста. Ссылка u.id внутри такого подзапроса вызовет ошибку: invalid reference to FROM-clause entry for table u. Чтобы разрешить корреляцию, нужно добавить LATERAL: FROM users u, LATERAL (SELECT ... WHERE user_id = u.id ...) last_order. Это явная декларация зависимости подзапроса от внешней таблицы.

Проверь себя · 1/3разбор после ответа
Нужно построить отчёт: по каждому продукту и каждому дню месяца — сумма продаж, включая дни с нулевыми продажами. Как сформировать каркас из всех пар дата-продукт?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»