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;
Связанные термины
Анекдоты по теме
Преподаватель: — Чем отличается INNER JOIN от LEFT JOIN? Студент: — INNER JOIN — как друзья, которые общаются только если у них есть общие интересы. LEFT JOIN — как родственники: ты их не звал, но они всё равно есть.
— Почему JOIN любят, но боятся? — Потому что соединить две таблицы легко. А четыре — уже сложно. А восемь — ты уже не программист, а жонглёр.
Таблица Users пишет таблице Orders: — Ты забыл про меня. Мы не связаны. Orders: — У тебя нет внешнего ключа ко мне. Users: — Значит, я буду NULL в твоей жизни. DBA: — Это LEFT JOIN, успокойтесь.