如何使用sql语句计算树的深度?

问题描述 投票:1回答:1

我不太了解递归查询的工作方式以及如何解决这个问题。我们在左边看到了桌子,结构看起来像右边的树:

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语句都会帮助我解决这个问题

提前致谢!

mysql sql tree recursive-query
1个回答
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 │
└──────┴─────────┴────┘

DBFiddle Demo

© www.soinside.com 2019 - 2024. All rights reserved.