SQLLab
Глоссарий/LATERAL JOIN
JOINПродвинутый

LATERAL JOIN

Подзапрос в FROM, который может ссылаться на колонки из предыдущих таблиц того же FROM.

Синтаксис
SELECT ... FROM t1, LATERAL (SELECT ... WHERE fk = t1.id LIMIT n) sub;

Объяснение

LATERAL позволяет правой части JOIN обращаться к текущей строке левой части. Это невозможно в обычном JOIN. Классический пример: для каждого пользователя получить его последние N заказов.

Пример

-- Последние 3 заказа каждого пользователя
SELECT u.name, o.id, o.total
FROM users u,
LATERAL (
  SELECT id, total FROM orders
  WHERE user_id = u.id
  ORDER BY created_at DESC
  LIMIT 3
) o;