加深度限制(通用)
加深度限制(通用)
WITH RECURSIVE org AS (
SELECT id, manager_id, 1 AS lvl
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.manager_id, o.lvl + 1
FROM employees e
JOIN org o ON e.manager_id = o.id
WHERE o.lvl < 10 -- 深度上限
)
SELECT * FROM org;PostgreSQL 14+ 环检测
PostgreSQL 14+ 环检测
WITH RECURSIVE walk AS (
SELECT id, parent_id FROM nodes WHERE parent_id IS NULL
UNION ALL
SELECT n.id, n.parent_id
FROM nodes n
JOIN walk w ON n.parent_id = w.id
) CYCLE id SET is_cycle USING path
SELECT * FROM walk;| MySQL | cte_max_recursion_depth 默认 1000,超出报 Recursive query aborted |
|---|---|
| PostgreSQL | 无默认深度限制;14+ 支持 CYCLE 子句 |
| 通用做法 | 递归项加深度上限,定期巡检异常数据 |