CTE recursivas para jerarquías
Recorra datos jerárquicos (organigramas, comentarios encadenados y recorridos de grafos) con WITH RECURSIVE y condiciones de parada.
CTE recursivas para jerarquías es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Por qué usar la recursión?
El SQL tradicional no puede recorrer un árbol de profundidad desconocida: padres de padres, hijos de hijos. Las CTE recursivas son la solución estándar de SQL.
Anatomía
Una CTE recursiva tiene dos partes unidas mediante UNION ALL:
WITH RECURSIVE name AS (
-- 1. Anchor query: seed rows
SELECT ...
UNION ALL
-- 2. Recursive step: references the CTE itself
SELECT ...
FROM name JOIN ...
)
SELECT * FROM name;Recorrer un organigrama
Busque todos los empleados que dependen directa o indirectamente de un gerente determinado:
WITH RECURSIVE reports AS (
-- anchor: the manager themself
SELECT id, full_name, manager_id, 0 AS depth
FROM employees WHERE id = 42
UNION ALL
-- recurse: people whose manager is in reports
SELECT e.id, e.full_name, e.manager_id, r.depth + 1
FROM employees e
JOIN reports r ON r.id = e.manager_id
)
SELECT * FROM reports ORDER BY depth, full_name;Comentarios anidados
Recorra un árbol de discusión desde una raíz:
WITH RECURSIVE thread AS (
SELECT id, parent_id, body, 0 AS depth, ARRAY[id] AS path
FROM comments WHERE id = $1
UNION ALL
SELECT c.id, c.parent_id, c.body, t.depth + 1, t.path || c.id
FROM comments c
JOIN thread t ON c.parent_id = t.id
)
SELECT * FROM thread ORDER BY path;Terminación
La recursión se detiene cuando el paso recursivo no devuelve filas nuevas.
Evitar bucles infinitos
Si el grafo contiene ciclos, lleve un registro de los nodos visitados:
WITH RECURSIVE walk AS (
SELECT id, ARRAY[id] AS path FROM nodes WHERE id = $1
UNION ALL
SELECT e.target_id, w.path || e.target_id
FROM edges e
JOIN walk w ON e.source_id = w.id
WHERE e.target_id <> ALL(w.path)
)
SELECT * FROM walk;Series numéricas
Las CTE recursivas también pueden generar secuencias:
WITH RECURSIVE n(i) AS (
VALUES (1)
UNION ALL
SELECT i + 1 FROM n WHERE i < 100
)
SELECT i, i*i AS square FROM n;Lista de materiales
Descomponga un producto en todos sus componentes, incluidos los subconjuntos:
WITH RECURSIVE bom AS (
SELECT part_id, sub_part_id, qty FROM parts WHERE part_id = $1
UNION ALL
SELECT p.part_id, p.sub_part_id, p.qty * bom.qty
FROM parts p
JOIN bom ON bom.sub_part_id = p.part_id
)
SELECT sub_part_id, SUM(qty) AS total_qty FROM bom GROUP BY sub_part_id;Límites de profundidad
Por seguridad, limite la profundidad de la recursión:
WITH RECURSIVE tree AS (
SELECT id, parent_id, 0 AS depth FROM nodes WHERE id = $1
UNION ALL
SELECT n.id, n.parent_id, t.depth + 1
FROM nodes n JOIN tree t ON n.parent_id = t.id
WHERE t.depth < 10
)
SELECT * FROM tree;UNION frente a UNION ALL
UNION ALL es la opción habitual. UNION elimina los duplicados, lo que resulta útil cuando se puede llegar a un nodo por varios caminos.
Rendimiento
Las CTE recursivas se evalúan de forma iterativa. La «tabla de trabajo» de cada paso contiene las filas producidas por el paso anterior. Cree índices para las columnas de unión.
Resumen
Las CTE recursivas recorren jerarquías y grafos.
- Ancla + UNION ALL + paso recursivo
- Se detienen cuando el paso recursivo no devuelve filas
- Use un array de rutas para romper los ciclos
Comprobación rápida
¿Qué palabra clave convierte una CTE en recursiva?
Preguntas frecuentes
¿La lección «CTE recursivas para jerarquías» es gratis?
Sí — el texto completo de «CTE recursivas para jerarquías» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «CTE recursivas para jerarquías»?
Recorra datos jerárquicos (organigramas, comentarios encadenados y recorridos de grafos) con WITH RECURSIVE y condiciones de parada. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «CTE recursivas para jerarquías»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Subconsultas escalares, de fila y de tabla
- Subconsultas correlacionadas y no correlacionadas
- Expresiones de tabla comunes (WITH)
- CTE recursivas para jerarquías