Sêniorcterecursãomodelagem

CTE recursivo para hierarquia organizacional

Publicado em 2025-03-01

Pergunta

Como listar toda a cadeia de gestores até o CEO partindo de um colaborador específico?

Explicação

CTEs recursivas resolvem problemas de grafos em árvores: organograma, categorias aninhadas, BOM. A âncora define o ponto inicial e a parte recursiva navega o relacionamento pai-filho.

Query SQL

sql
WITH RECURSIVE chain AS (
  SELECT id, nome, manager_id, 0 AS nivel
  FROM colaboradores
  WHERE id = 42

  UNION ALL

  SELECT c.id, c.nome, c.manager_id, ch.nivel + 1
  FROM colaboradores c
  JOIN chain ch ON ch.manager_id = c.id
)
SELECT * FROM chain ORDER BY nivel;

Resposta esperada

Lista do colaborador 42 até o topo da hierarquia, com profundidade em cada nível.

Erros comuns

  • Esquecer UNION ALL (UNION elimina duplicatas e mata a recursão em alguns dialetos)
  • Não ter condição de parada quando há ciclos nos dados
  • Confundir a ordem da junção (filho.manager_id = pai.id)

Dica de entrevista

Antes de escrever a CTE, desenhe a árvore no papel e identifique a âncora e a relação de avanço.

Compartilhar: