Как вы рассчитываете глубину дерева с помощью оператора SQL? - PullRequest
0 голосов
/ 08 сентября 2018

Я не совсем понимаю, как работают рекурсивные запросы и как решить эту проблему. Нам дали таблицу слева, а структура выглядит как дерево справа:

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 голосов
/ 08 сентября 2018

Вы можете использовать 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

...