Sobes.tech
Junior — Middle

Paaiškinkite, kas yra rekursyviosios bendrosios lentelės išraiškos (CTE) ir kaip jos naudojamos SQL užklausose

sobes.tech AI

Atsakymas iš AI

Rekursyvios bendrosios lentelės išraiškos (CTE) yra specialus laikinas rezultatų rinkinys SQL, kuris gali nurodyti pats save, kad atliktų rekursinius užklausimus. Jie naudingi dirbant su hierarchinėmis arba grafinėmis duomenų struktūromis, pavyzdžiui, norint pereiti per kategorijų medį, organizuoti darbuotojus pagal pavaldumą ir pan.

Rekursyvus CTE susideda iš dviejų dalių:

  1. Pagrindinis užklausimas — pradinis eilučių rinkinys.
  2. Rekursinis užklausimas — naudoja ankstesnės iteracijos rezultatus, kad gautų kitą duomenų lygį.

Pavyzdys: gauti visus pavaldinius darbuotojus su id = 1 hierarchijoje.

WITH RECURSIVE Subordinates AS (
    SELECT id, manager_id, name
    FROM employees
    WHERE id = 1  -- pagrindinis atvejis
  
    UNION ALL
  
    SELECT e.id, e.manager_id, e.name
    FROM employees e
    INNER JOIN Subordinates s ON e.manager_id = s.id  -- rekursinis atvejis
)
SELECT * FROM Subordinates;

Šis užklausimas pirmiausia pasirenka darbuotoją su id=1, tada rekursyviai prideda visus darbuotojus, kurių manager_id sutampa su jau rastų darbuotojų id, kol neperžengia visos hierarchijos.