Встречается на собеседованиях • сегодня

Что такое рекурсия в запросе в БД

Рекурсия в SQL — это возможность запроса вызывать сам себя для обработки иерархических данных. Это реализуется через рекурсивные обобщённые табличные выражения (CTE) с помощью WITH RECURSIVE.

Пример:

sql
WITH RECURSIVE employee_hierarchy AS (
    -- Базовый случай (начало иерархии)
    SELECT id, name, manager_id, 1 AS level
    FROM employees
    WHERE manager_id IS NULL
    
    UNION ALL
    
    -- Рекурсивная часть
    SELECT e.id, e.name, e.manager_id, eh.level + 1
    FROM employees e
    JOIN employee_hierarchy eh ON e.manager_id = eh.id
)
SELECT * FROM employee_hierarchy;

Нюансы:

  1. Обязателен UNION ALL между базовым и рекурсивным блоками.
  2. Нужно условие остановки, иначе — бесконечная рекурсия (в примере это неявный выход, когда JOIN не находит строк).
  3. Поддерживается не во всех СУБД (например, MySQL 8.0+, PostgreSQL, SQLite).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы