Menu
Coddy logo textTech

Esplorare una gerarchia

Fa parte della sezione Oltre le basi del percorso SQL di Coddy. Lezione 21 di 27.

Il vero motivo per cui esistono le CTE ricorsive: percorrere una relazione padre/figlio memorizzata in un’unica tabella. Supponiamo che employees abbia una colonna manager_id che rimanda alla stessa tabella:

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- ancora: il dipendente di partenza
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- ricorsivo: passa al responsabile
)
SELECT * FROM chain

Ogni passaggio unisce nuovamente la CTE a employees, risalendo di un livello nell'albero. La ricorsione si interrompe naturalmente quando una riga non ha un responsabile (JOIN non trova corrispondenze).

challenge icon

Sfida

Medio

Tabelle e colonne disponibili:

  • categories: id, name, parent_id

Ogni categoria ha un parent_id facoltativo che punta a un'altra categoria. Restituisci tutte le categorie discendenti della categoria id = 1 (i suoi figli, nipoti, …), ma non la categoria 1 stessa. Restituisci id e name, ordinati per id.

Provalo tu

WITH RECURSIVE descendants AS (
    -- base: figli diretti di id 1
    -- ricorsivo: i loro figli, ecc.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Oltre le basi

Esercitati da solo: Playground SQL