Une hiérarchie, comme un organigramme ou une arborescence de catégories, se stocke avec une colonne parent référençant la même table. Une CTE récursive la parcourt en partant de la racine, en suivant les liens parent-enfant, et peut calculer le niveau ou le chemin de chaque nœud.
Exemple
WITH RECURSIVE arbre AS (
SELECT id, parent_id, 0 AS niveau FROM categories WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.parent_id, a.niveau + 1 FROM categories c JOIN arbre a ON c.parent_id = a.id
)
SELECT * FROM arbre;