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ų:
- Pagrindinis užklausimas — pradinis eilučių rinkinys.
- 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.