Recursive CTE
Рекурсивный CTE использует собственный результат
Обычный CTE вычисляется один раз как именованный набор. Рекурсивный CTE может ссылаться на себя и шаг за шагом добавлять новые строки, пока очередной шаг больше ничего не возвращает.
Две части рекурсии
У рекурсивного CTE есть начальная часть, которая создаёт первые строки, и рекурсивная часть, которая строит следующие строки на основе уже полученных.
WITH RECURSIVE numbers(n) AS (
SELECT 1
UNION ALL
SELECT n + 1
FROM numbers
WHERE n < 5
)
SELECT n
FROM numbers;
Начальная часть создаёт число 1. Затем рекурсивная часть берёт текущее значение и добавляет следующее, пока условие n < 5 позволяет продолжать. Результат — числа от 1 до 5.
Где это применяется
Главный практический сценарий — иерархические данные: дерево категорий, структура подразделений, комментарии с родительскими сообщениями и другие модели «родитель → потомок».
У рекурсии должно быть условие остановки.
Ошибочная рекурсивная часть может генерировать строки слишком долго или бесконечно с точки зрения логики запроса. Поэтому всегда проверяй, что каждый шаг действительно приближает вычисление к завершению.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти