sql - 如何使用 CTE 自下而上展平父子层次结构
问题描述
对于堆栈溢出的第一个问题,我有以下问题,我有一个层次结构表,如下所示:
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?
解决方案
对此不是 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'
似乎工作
推荐阅读
- java - Java Web 应用程序 (Jsp/Servlets) 启动脚本
- yaml - Codacy yaml 配置以忽略测试文件中的重复
- java - 如何使用 JAVA 将所有 CSS 属性应用于网页中的任何元素?
- python - 从随机生成的列表中选择 - python
- css - 在 testcafe 中等待 css 属性值
- r - 如何将任意序列附加到数据框列
- c# - Mixed mode Debugging Python/C# using Child Process Debugging Power Tool
- python - 如何将 gRPC Python 插件与 Docker 和 Google Cloud Builds 一起使用?
- neo4j - Neo4J 中的无效备份
- c# - 如何在 Visual Studio 上使用 xamarin 表单向 ArcGIS Runtime 共享地图应用程序添加动态标记或图钉?