Appearance
递归查询写法
公用表表达式 CTE
WITH定义临时命名结果集,可链式多个 CTE。
递归 CTE
WITH RECURSIVE:锚定成员 + 递归成员,用于 树、层级、路径 展开。
sql
WITH RECURSIVE tree AS (
SELECT id, parent_id, name, 1 AS lvl FROM org WHERE parent_id IS NULL
UNION ALL
SELECT o.id, o.parent_id, o.name, t.lvl + 1
FROM org o JOIN tree t ON o.parent_id = t.id
)
SELECT * FROM tree;注意
- 递归深度与 环 需业务或
MAX_RECURSION类限制(MySQL 通过cte_max_recursion_depth等控制,见手册)。 - 大数据量层级展开优先考虑 闭包表 或 物化路径 等模型,避免深度递归 SQL。