我不太了解递归查询的工作方式以及如何解决此问题。左侧是表格,结构看起来像右侧的树:
ID | Parent 1
1 null / \
2 1 2 3
3 1 \
4 3 4
5 4 / \
6 4 5 6
7 6 \
7
我知道如何获取每个节点的所有父节点...但是我不知道如何找到树的最大深度。意思是我必须找出这棵树有多少层。没有更多信息
如果您能为我提供mysql的解决方案,我将不胜感激,但是任何sql语句都可以帮助我解决这个问题
谢谢!
答案 0 :(得分:2)
您可以使用RECURSIVE cte
(MySQL 8.0):
WITH RECURSIVE cte AS (
SELECT 1 AS lvl, Parent, id
FROM tab
WHERE Parent IS NULL
UNION ALL
SELECT lvl + 1, tab.Parent, tab.id
FROM tab
JOIN cte
ON tab.Parent = cte.Id
)
SELECT * -- MAX(lvl) AS max_depth_of_tree
FROM cte;
输出:
┌──────┬─────────┬────┐
│ lvl │ Parent │ id │
├──────┼─────────┼────┤
│ 1 │ │ 1 │
│ 2 │ 1 │ 2 │
│ 2 │ 1 │ 3 │
│ 3 │ 3 │ 4 │
│ 4 │ 4 │ 5 │
│ 4 │ 4 │ 6 │
│ 5 │ 6 │ 7 │
└──────┴─────────┴────┘