Skip to content

递归查询写法

公用表表达式 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。