Sobes.tech
Junior — Middle

Wyjaśnij, czym są rekurencyjne wyrażenia tabel wspólnych (CTE) i jak są używane w zapytaniach SQL

sobes.tech AI

Odpowiedź od AI

Rekurencyjne wyrażenia tabeli wspólnych (CTE) to specjalny rodzaj tymczasowych zbiorów wyników w SQL, które mogą odwoływać się do siebie, aby wykonywać zapytania rekurencyjne. Są przydatne do pracy z hierarchicznymi lub graficznymi strukturami danych, na przykład do przechodzenia przez drzewo kategorii, organizowania pracowników według podległości itp.

Rekurencyjny CTE składa się z dwóch części:

  1. Zapytanie bazowe — początkowy zestaw wierszy.
  2. Zapytanie rekurencyjne — korzysta z wyników poprzedniej iteracji, aby uzyskać kolejny poziom danych.

Przykład: pobranie wszystkich podległych pracowników o id = 1 w hierarchii pracowników.

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

Ta zapytanie najpierw wybiera pracownika o id=1, następnie rekurencyjnie dodaje wszystkich pracowników, których manager_id odpowiada id już znalezionych pracowników, aż do przeszukania całej hierarchii.