Menu
Coddy logo textTech

Przechodzenie po hierarchii

Część sekcji Poza podstawami ścieżki SQL w Coddy. Lekcja 21 z 27.

Prawdziwy powód istnienia rekurencyjnych CTE: przechodzenie po relacji rodzic/dziecko zapisanej w jednej tabeli. Załóżmy, że tabela employees ma kolumnę manager_id, która wskazuje z powrotem na tę samą tabelę:

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- początek: pracownik, od którego zaczynamy
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- rekurencja: przejdź do przełożonego
)
SELECT * FROM chain

Każdy krok ponownie łączy CTE z employees, przechodząc o jeden poziom w górę drzewa. Rekurencja kończy się naturalnie, gdy wiersz nie ma menedżera (łączenie JOIN niczego nie dopasowuje).

challenge icon

Wyzwanie

Średni

Dostępne tabele i kolumny:

  • categories: id, name, parent_id

Każda kategoria ma opcjonalne parent_id wskazujące inną kategorię. Zwróć wszystkie kategorie będące potomkami kategorii id = 1 (jej dzieci, wnuki, …), ale nie samą kategorię 1. Zwróć id i name, posortowane według id.

Spróbuj swoich sił

WITH RECURSIVE descendants AS (
    -- część początkowa: bezpośrednie dzieci id 1
    -- część rekurencyjna: ich dzieci itd.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Poza podstawami

Poćwicz samodzielnie: Edytor online SQL