SQL 递归查询实战模式
递归CTE实战:BOM物料清单爆炸、组织架构树、路径查找(地铁换乘)、图遍历、斐波那契数列、日期序列生成 · 难度:入门 · +10XP
SQL 递归CTE实战 —— 树形数据遍历
递归CTE(WITH RECURSIVE)是SQL中最强大的查询模式之一,专门处理树形结构数据——组织架构、分类层级、物料清单(BOM)等。
基本语法
WITH RECURSIVE cte_name AS (
-- 基础查询(锚点):起始行
SELECT id, name, parent_id, 1 AS level FROM categories WHERE parent_id IS NULL
UNION ALL
-- 递归部分:引用cte自身
SELECT c.id, c.name, c.parent_id, cte.level + 1
FROM categories c JOIN cte ON c.parent_id = cte.id
)
SELECT * FROM cte_name;
实战:组织架构树
WITH RECURSIVE org_tree AS (
SELECT id, name, manager_id, 1 AS depth, CAST(name AS CHAR(500)) AS path
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, t.depth + 1,
CONCAT(t.path, ' > ', e.name)
FROM employees e JOIN org_tree t ON e.manager_id = t.id
)
SELECT CONCAT(REPEAT(' ', depth-1), name) AS 组织架构 FROM org_tree;
动手练习
- 基础练习:用递归CTE查询所有顶级分类及其所有子分类。
- 进阶应用:用递归CTE实现BOM物料清单的成本汇总。
- 项目实战:在分类/组织/菜单等树形数据中替换递归查询的手写代码。