Как сгладить иерархию родитель-потомок снизу вверх, используя CTE - PullRequest
0 голосов
/ 06 января 2020

для моего первого вопроса о переполнении стека У меня есть следующая проблема, у меня есть иерархическая таблица, которая выглядит следующим образом:

Table TEST

 - [wbe_node_type] [varchar](50) NOT NULL,  /* leaf or expanded */
 - [wbe_node] [varchar](50) NOT NULL,
 - [wbe_node_mask] [varchar](50) NOT NULL,
 - [wbe_description] [varchar](50) NOT NULL,
 - [wbe_parent] [varchar](50) NOT NULL,    
 - [wbe_node_niveau] [int] NOT NULL,        /* level of the record in the hierarchy */

Данные выглядят следующим образом:

wbe_node_type, wbe_node, wbe_node_mask, wbe_omschrijving, wbe_parent, wbe_node_niveau

expanded, AFCARN0, A-FCARN0, Project 1, [NULL]. 0
leaf, AFCARN04010, A-FCARN0.40.10, Description 2, AFCARN040, 2
expanded, AFCARN040, A-FCARN0.40, Realisatie, AFCARN0, 1

строка с wbe_node_type 'leaf' является самым низким уровнем в иерархии, максимальная глубина - 8 уровней. Я хочу выровнять иерархию в одну строку от нижнего уровня («листового» узла) до верхнего уровня.

Я думал начать поиск всех записей с wbe_node_type = 'leaf' и найти все уровни над ним. Это легко сделать с помощью временной таблицы. Однако инструмент, который я использую для запроса этих данных, не работает с временными таблицами. Поэтому я хотел попробовать это с помощью CTE.

Когда я ищу примеры в Интернете, они всегда начинаются сверху и идут вниз. Можно ли заполнить CTE снизу, начиная с самых низких уровней?

1 Ответ

0 голосов
/ 06 января 2020

Не уверен на 100% в этом, но, возможно, что-то вроде этого.

  SELECT 
*
 FROM TEST l3 
 Inner JOIN TEST l2 ON l3.wbe_parent = l2.wbe_node
 Inner JOIN TEST l1 ON l2.wbe_parent = l1.wbe_node
 WHERE 
l3.wbe_node = 'AFCARN04010'

Кажется, работает

...