Sobes.tech
Junior — Middle

Kā atšķiras rekursīvās un nerekurzīvās izteiksmes kopējās tabulas izteiksmēs (CTE) SQL?

sobes.tech AI

Atbilde no AI

Kopējās tabulas izteiksme (CTE) SQL ir pagaidu rezultāts, ko var izmantot galvenajā vaicājumā. Pastāv divu veidu CTE: rekursīvie un nerekursīvie.

  • Nerekursīvais CTE: tas ir vienkārši nosaukts pagaidu datu kopums, kas definēts ar vienu vaicājumu. To var izmantot sarežģītu vaicājumu vienkāršošanai vai apakšvaicājumu atkārtotai lietošanai.

  • Rekursīvais CTE: tas ir CTE, kas atsaucas uz sevi, ļaujot veikt rekursīvas operācijas, piemēram, hierarhiju vai grafu pārlūkošanu.

Nerekursīva CTE piemērs:

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

Rekursīva CTE piemērs (visu pakļauto darbinieku meklēšana):

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- vadītājs
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;

Tādējādi, rekursīvie CTE ļauj veidot ķēdes un hierarhijas, kamēr nerekursīvie vienkārši vienkāršo vaicājuma struktūru.