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

时间:2018-09-08 09:42:55

标签: mysql sql tree recursive-query

我不太了解递归查询的工作方式以及如何解决此问题。左侧是表格,结构看起来像右侧的树:

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

谢谢!

1 个答案:

答案 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 │
└──────┴─────────┴────┘

DBFiddle Demo