递归公共表表达式:生成组织架构树的深度查询
揭示 CTE 递归原理,用于查询树形结构的父子层级数据,适合血缘关系、分类树、报表展开等场景。 · 难度:入门 · +10XP
递归公共表表达式:生成组织架构树的深度查询
许多开发者把 CTE 当成临时视图,却忽略了 RECURSIVE 关键字才是处理树形关系的利器。本教程以企业组织架构为例,用递归 CTE 从根节点出发层层向下遍历,返回每个员工的完整路径、层级深度以及祖先后代关系。你将理解锚点成员(Anchor Member)与递归成员(Recursive Member)如何通过 UNION ALL 循环拼接结果集,以及如何用控制条件避免无限递归。
WITH RECURSIVE org_tree AS (
-- 锚点:顶级管理者
SELECT employee_id, name, manager_id, 1 AS level,
CAST(name AS VARCHAR(100)) AS path
FROM employees WHERE manager_id IS NULL
UNION ALL
-- 递归:连接下属
SELECT e.employee_id, e.name, e.manager_id, t.level + 1,
CAST(t.path || ' -> ' || e.name AS VARCHAR(100))
FROM employees e
INNER JOIN org_tree t ON t.employee_id = e.manager_id
)
SELECT * FROM org_tree ORDER BY path;