Рекурсивный CTE — это запрос, который ссылается сам на себя для обхода иерархических данных или данных с древовидной структурой, например организационных схем или деревьев категорий.
Рекурсивный CTE состоит из двух частей, соединённых с помощью UNION ALL:
Рекурсия останавливается автоматически, когда рекурсивный член больше не возвращает строк.
WITH RECURSIVE subordinates AS (
-- Якорь: выбираем менеджера верхнего уровня
SELECT emp_id, manager_id, 0 AS level
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Рекурсия: соединяем каждого сотрудника с его менеджером
SELECT e.emp_id, e.manager_id, s.level + 1
FROM employees e
JOIN subordinates s ON e.manager_id = s.emp_id
)
SELECT * FROM subordinates;
employees с текущим результатом, добавляя подчинённых на один уровень за итерациюlevel, что позволяет легко определить глубину в иерархииРекурсивные CTE — это стандартный SQL-подход для запросов отношений родитель-потомок без предварительного знания глубины иерархии.
Рекурсивный CTE должен содержать ровно две части: базовый член и рекурсивный член, которые всегда объединяются с помощью оператора UNION ALL.
Новый — ещё не проверен сообществом
Вы