Sobes.tech
Junior — Middle

Обяснете какво представляват рекурсивните Общи Таблични Изрази (CTE) и как се използват в SQL заявки

sobes.tech AI

Отговор от AI

Рекурсивните изрази на обща таблица (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-то на вече намерените служители, докато не обходи цялата йерархия.