CROSS JOIN
Декартово произведение двух таблиц: каждая строка первой соединяется с каждой строкой второй.
SELECT ... FROM t1 CROSS JOIN t2;Объяснение
Пример
-- Все комбинации размеров и цветов
SELECT s.name AS size, c.name AS color
FROM sizes s
CROSS JOIN colors c
ORDER BY s.name, c.name;Связанные термины
Анекдоты по теме
Подзапрос говорит JOIN: — Я тоже могу соединять таблицы! JOIN: — Но я делаю это один раз. Подзапрос: — Зато я более читаем! OPTIMIZER: — На самом деле я часто превращаю подзапросы в JOIN сам.
— Что такое lateral join? — Это когда правая часть JOIN может ссылаться на строки из левой. — Зачем? — Классика: для каждого пользователя — его последние 3 заказа. SELECT u.*, o.* FROM users u, LATERAL (SELECT * FROM orders WHERE user_id = u.id ORDER BY date DESC LIMIT 3) o;
Рекурсивный CTE для иерархии: WITH RECURSIVE tree AS ( SELECT id, name, parent_id, 0 AS depth FROM categories WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, t.depth + 1 FROM categories c JOIN tree t ON c.parent_id = t.id ) SELECT * FROM tree ORDER BY depth, name; Программист: это чище чем 10 JOIN!