Рекурсивные CTE позволяют обрабатывать иерархические данные и объединять все уровни иерархии, присутствующие в базе данных. www.geeksforgeeks.org
Рекурсивное CTE состоит из трёх частей: sql-tutorial.github.io
- Начальный запрос (якорный член) возвращает базовый набор результатов CTE. sql-tutorial.github.io
- Рекурсивный запрос (рекурсивный член) ссылается на общее табличное выражение и объединяется с якорным членом с помощью оператора UNION ALL. sql-tutorial.github.io
- Условие завершения, указанное в рекурсивном члене, которое завершает выполнение рекурсивного члена. sql-tutorial.github.io
Порядок выполнения рекурсивного CTE: sql-tutorial.github.io
- Выполнить якорный элемент, чтобы сформировать базовый набор результатов (R0), использовать этот результат для следующей итерации. sql-tutorial.github.io
- Выполнить рекурсивный элемент с входным набором результатов из предыдущей итерации (Ri-1) и вернуть набор промежуточных результатов (Ri) до тех пор, пока не будет выполнено условие завершения. sql-tutorial.github.io
- Объединить все наборы результатов (R0, R1, … Rn) с помощью оператора UNION ALL для получения окончательного набора результатов. sql-tutorial.github.io
Пример использования рекурсивного CTE — получение всех подчинённых топ-менеджера, у которого нет менеджера (или значение в столбце manager_id равно NULL). sql-tutorial.github.io В этом примере якорный член получает топ-менеджера, а рекурсивный запрос возвращает подчинённых топ-менеджеров и подчинённых топ-менеджера и т. д.. sql-tutorial.github.io