L oop присоединиться или рекурсивно в sql, чтобы получить максимальный уровень? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть имя таблицы базы данных "category" и атрибуты:

  • id
  • parent_id
  • code
  • name

Пример данных:

[1][null][0][category 1]
[2][null][1][category 2]
[3][null][2][category 3]
[4][null][3][category 4]
[5][3][4][category 5]
[6][null][5][category 6]
[7][5][0][category 7]
[8][null][1][category 8]
[9][7][2][category 9]
[10][null][3][category 10]
[11][null][4][category 11]
[12][null][5][category 12]

Таблица категорий похожа на дерево или узлы. Может иметь разный уровень.

Для данных примера категория 9 является дочерней по отношению к категории 7. А категория 7 является дочерней по отношению к категории 5. А категория 5 является дочерней по отношению к категории 3.

Вы можете представить эту категорию как дерево или узел.

Категория 3> Категория 5> Категория 7> Категория 9

Итак, категория 9 - это уровень 4.

Итак, мой вопрос, как получить максимальный уровень, чтобы получить ожидаемый результат 4.

1 Ответ

0 голосов
/ 13 февраля 2020

Если вы хотите рассчитывать для категории 3

create table #temp
(
id int,
parent_id int,
code int,
name varchar(20)
)

insert into #temp values(1,null,0,'category 1')
insert into #temp values(2,null,1,'category 2')
insert into #temp values(3,null,2,'category 3')
insert into #temp values(4,null,3,'category 4')
insert into #temp values(5,3,4,'category 5')
insert into #temp values(6,null,5,'category 6')
insert into #temp values(7,5,0,'category 7')
insert into #temp values(8,null,1,'category 8')
insert into #temp values(9,7,2,'category 9')
insert into #temp values(10,null,3,'category 10')
insert into #temp values(11,null,4,'category 11')
insert into #temp values(12,null,5,'category 12')



;WITH items AS (
    SELECT id,name,parent_id
    FROM #temp 
    WHERE parent_id is null and id=3
    UNION ALL

    SELECT i.id,i.name,i.parent_id
    FROM #temp i
    INNER JOIN items itms ON itms.id = i.parent_id
)
SELECT count(*) FROM items 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...