Sobes.tech
Назад к вопросам
Junior — Middle
75

Объясните, что такое рекурсивные Common Table Expressions (CTE) и как они используются в SQL-запросах

Ответ от нейросети

sobes.tech AI

Рекурсивные Common Table Expressions (CTE) — это особый вид временных результирующих наборов в SQL, которые могут ссылаться сами на себя для выполнения рекурсивных запросов. Они полезны для работы с иерархическими или графовыми структурами данных, например, для обхода дерева категорий, организации сотрудников по подчинённости и т.п.

Рекурсивный CTE состоит из двух частей:

  1. Базовый запрос — начальное множество строк.
  2. Рекурсивный запрос — использует результаты предыдущей итерации для получения следующего уровня данных.

Пример: получение всех подчинённых сотрудника с id = 1 в иерархии сотрудников.

WITH RECURSIVE Subordinates AS (
    SELECT id, manager_id, name
    FROM employees
    WHERE id = 1  -- базовый случай
  
    UNION ALL
  
    SELECT e.id, e.manager_id, e.name
    FROM employees e
    INNER JOIN Subordinates s ON e.manager_id = s.id  -- рекурсивный случай
)
SELECT * FROM Subordinates;

Такой запрос сначала выбирает сотрудника с id=1, затем рекурсивно добавляет всех сотрудников, у которых manager_id совпадает с id уже найденных сотрудников, пока не переберёт всю иерархию.