如何使用 CTE 自下而上扁平化父子层次结构
How to flatten parent-child hierarchy from bottom up using CTE
关于堆栈溢出的第一个问题,我有以下问题,我有一个层次结构 table,如下所示:
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层。我想要的是将层次结构从底层('leaf' 节点)平展到顶层。
我的想法是开始查找所有包含 wbe_node_type = 'leaf' 的记录,并找到它上面的所有级别。使用 temp-table 很容易做到这一点。但是,我用来查询此数据的工具不适用于 temp-tables。所以我想使用 CTE 来尝试一下。
当我在网上寻找示例时,这些示例总是从顶部开始,然后依次向下。是否可以从最低级别开始从底部填充 CTE?
对此不是 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'
似乎有效
关于堆栈溢出的第一个问题,我有以下问题,我有一个层次结构 table,如下所示:
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层。我想要的是将层次结构从底层('leaf' 节点)平展到顶层。
我的想法是开始查找所有包含 wbe_node_type = 'leaf' 的记录,并找到它上面的所有级别。使用 temp-table 很容易做到这一点。但是,我用来查询此数据的工具不适用于 temp-tables。所以我想使用 CTE 来尝试一下。
当我在网上寻找示例时,这些示例总是从顶部开始,然后依次向下。是否可以从最低级别开始从底部填充 CTE?
对此不是 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'
似乎有效