Sobes.tech
Junior — Middle

Selgitage, mis on rekursiivsed ühiste tabelite avaldised (CTE) ja kuidas neid SQL-päringutes kasutatakse

sobes.tech AI

Vastus AI-lt

Rekursiivsed Ühiste Tabeli väljendid (CTE) on spetsiaalne ajutine tulemuste kogum SQL-is, mis võib viidata iseendale, võimaldades rekursiivseid päringuid. Need on kasulikud hierarhiliste või graafiliste andmestruktuuride töötamisel, näiteks kategooriate puu läbimiseks, töötajate korraldamiseks alluvuse järgi jne.

Rekursiivne CTE koosneb kahest osast:

  1. Põhivõte — algne ridade kogum.
  2. Rekursiivne võte — kasutab eelneva iteratsiooni tulemusi, et saada järgmise taseme andmeid.

Näide: saada kõik alluvad töötajad, kelle id = 1 organisatsioonis.

WITH RECURSIVE Subordinates AS (
    SELECT id, manager_id, name
    FROM employees
    WHERE id = 1  -- põhijuhtum
  
    UNION ALL
  
    SELECT e.id, e.manager_id, e.name
    FROM employees e
    INNER JOIN Subordinates s ON e.manager_id = s.id  -- rekursiivne juhtum
)
SELECT * FROM Subordinates;

See päring valib esmalt töötaja id=1, seejärel rekursiivselt lisab kõik töötajad, kelle manager_id vastab juba leitud töötajate id-le, kuni kogu hierarhia on läbi käidud.