Нужно для каждого пользователя достать 3 последних заказа. Запрос: SELECT u.name, o.* FROM users u, LATERAL (SELECT * FROM orders WHERE user_id = u.id ORDER BY created_at DESC LIMIT 3) o. Что делает LATERAL?

AОбычный подзапрос в FROM может ссылаться на столбцы внешнего FROMLATERAL не нужен
BКлючевое слово LATERAL применяется к JOIN ON, чтобы добавить дополнительные условия соединения
CПодзапрос с LATERAL может ссылаться на столбцы таблиц, указанных левее в том же FROM
DКлючевое слово LATERAL преобразует LEFT JOIN во внутреннее соединение для подзапроса
Правильный ответ. LATERAL позволяет подзапросу в FROM ссылаться на столбцы из таблиц, перечисленных левее — здесь u.id из users.

Разбор

Без LATERAL подзапрос в FROM изолирован и не может ссылаться на другие таблицы того же FROM. LATERAL снимает это ограничение: подзапрос выполняется для каждой строки левой таблицы, имея доступ к её столбцам. Это аналог коррелированного подзапроса, но в позиции FROM, что позволяет возвращать несколько строк и столбцов. Паттерн «top-N per group» через LATERAL часто эффективнее оконных функций.

Проверь себя · 1/3разбор после ответа
Какое условие обязательно, чтобы запрос с UNION был корректным?
Тренировать SQL в Telegram

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