Sobes.tech
Junior — Middle

Как се различават рекурсивните и нерекурсивните изрази в общите таблицени изрази (CTE) в SQL?

sobes.tech AI

Отговор от AI

Общото таблично изразяване (CTE) в SQL е временен резултат, който може да се използва в основната заявка. Има два типа CTE: рекурсивни и нерекурсивни.

  • Нерекурсивен CTE: това е просто именуван временен набор от данни, определен с една заявка. Може да се използва за опростяване на сложни заявки или за повторно използване на подзаявки.

  • Рекурсивен CTE: това е CTE, който се позовава сам на себе си, позволявайки извършването на рекурсивни операции, като обхождане на йерархии или графи.

Пример за нерекурсивен CTE:

WITH RecentOrders AS (
    SELECT * FROM Orders WHERE OrderDate > '2024-01-01'
)
SELECT * FROM RecentOrders WHERE CustomerID = 123;

Пример за рекурсивен CTE (търсене на всички подчинени служители):

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- началник
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;

По този начин, рекурсивните CTE позволяват изграждането на вериги и йерархии, докато нерекурсивните просто опростяват структурата на заявката.