Menu
Coddy logo textTech

Parcourir une hiérarchie

Fait partie de la section Au-delà des bases du Journey SQL de Coddy. Leçon 21 sur 27.

La véritable raison d’être des CTE récursives : parcourir une relation parent/enfant stockée dans une seule table. Supposons que employees possède une colonne manager_id qui renvoie vers la même table :

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- ancre : l'employé de départ
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- récursif : sauter au manager
)
SELECT * FROM chain

À chaque étape, la CTE se joint à nouveau à employees, en remontant d’un niveau dans l’arbre. La récursion s’arrête naturellement lorsqu’une row n’a pas de manager (JOIN ne trouve aucune correspondance).

challenge icon

Défi

Moyen

Tables et colonnes disponibles :

  • categories : id, name, parent_id

Chaque catégorie possède un parent_id facultatif pointant vers une autre catégorie. Renvoyez toutes les catégories qui sont des descendants de la catégorie id = 1 (ses enfants, petits-enfants, …), mais pas la catégorie 1 elle-même. Renvoyez id et name, triés par id.

Essayez vous-même

WITH RECURSIVE descendants AS (
    -- ancre : enfants directs de l'id 1
    -- récursif : leurs enfants, etc.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Au-delà des bases

Entraînez-vous par vous-même : Playground SQL