我不太了解递归查询的工作方式以及如何解决这个问题。我们在左边看到了桌子,结构看起来像右边的树:
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语句都会帮助我解决这个问题
提前致谢!
你可以使用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 │
└──────┴─────────┴────┘