IT-словарь › Базы данных › Рекурсивный запрос

Рекурсивный запрос

Базы данных Svenska → Обновлено: 2026-10-18

SQL-запрос, который вызывает сам себя для обхода иерархий и графов, — реализуется через WITH RECURSIVE. Стандартный способ получить целые поддеревья или цепочки предков из таблицы со списком смежности (модель с parent_id).

Механика: рекурсивное CTE состоит из двух частей — базового случая (стартовые строки, например конкретный узел) и рекурсивного шага, который соединяется с самим CTE и достаёт следующий уровень (скажем, дочерние узлы). База данных повторяет шаг, пока он не перестанет возвращать строки. Применение: «все подкатегории», «вся ветка комментариев», «кратчайший путь в графе», «все руководители выше сотрудника». Поддерживается в PostgreSQL, SQL Server, Oracle, MySQL 8+ и SQLite. Подводные камни: без условия, гарантирующего остановку, циклический граф даёт бесконечный цикл (в некоторых СУБД есть защита CYCLE); глубокие деревья могут работать медленно. Именно рекурсивные запросы делают список смежности практичным.

← Назад к словарю