Sobes.tech
Назад к вопросам
Middle
10

Разница между обычным CTE и рекурсивным CTE?

Компании, где спрашивали
МВидео/эльдорадо

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

sobes.tech AI

Обычный CTE (Common Table Expression) — это временный именованный результат запроса, который используется для упрощения сложных запросов, повышения читаемости и повторного использования внутри одного SQL-запроса. Он определяет набор строк, который можно использовать в основном запросе.

Рекурсивный CTE — это расширение обычного CTE, позволяющее выполнять рекурсивные запросы, то есть такие, где результат одной итерации используется для следующей. Это полезно для работы с иерархическими данными, например, обход дерева или графа.

Пример рекурсивного CTE для обхода иерархии сотрудников:

WITH RECURSIVE EmployeeHierarchy AS (
    SELECT EmployeeID, ManagerID, Name
    FROM Employees
    WHERE ManagerID IS NULL  -- корневой уровень
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;

Таким образом, основное отличие — рекурсивный CTE позволяет строить итеративные запросы, которые ссылаются на себя, а обычный CTE — нет.