【发布时间】:2020-06-03 22:23:09
【问题描述】:
我有一个父子 id_table 层次结构 - 例如
|parent|child|
|------|-----|
| | 0|
| 0| 1|
| 0| 2|
| 0| 3|
| 1| 4|
| 1| 5|
| 2| 6|
| 4| 7|
| 4| 8|
我正在构建一个可视化的树层次结构,上面的数据将被格式化为:
|parent|child1|child2|child3
|------|------|------|------
| 0| 1|4 | 7
| 0| 1|4 | 8
| 0| 1|5 |
| 0| 2|6 |
| 0| 3| |
现在我想修改这个查询,为每个没有孩子的父独立包含一行,所以上面的数据会变成:
|parent|child1|child2|child3
|------|------|------|------
| 0| | |
| 0| 1| |
| 0| 1| 4|
| 0| 1| 4| 7
| 0| 1| 4| 8
| 0| 1| 5|
| 0| 2| |
| 0| 2| 6|
| 0| 3| |
为了获得第一个结果,我正在使用重复的左连接(使用上面的第一个数据示例)构建数据,据我所知,我无法通过递归来做到这一点,例如:
SELECT t1.child AS parent
t2.child AS child1
t3.child AS child2
t4.child AS child3
FROM id_table t1
LEFT JOIN id_table t2
ON t1.child = t2.parent
LEFT JOIN id_table t3
ON t1.child = t3.parent
LEFT JOIN id_table t4
ON t1.child = t4.parent
WHERE t1.child = '0'
这得到了第二个示例,但我也缺少每个父母的记录,如第三个示例所示。
我认为这可能是一个简单的问题,我只是在语法上苦苦挣扎。 TIA 寻求帮助。
编辑:我对 SAS EG 中的类似实现有一个先前的问题:SQL - Recursive Tree Hierarchy with Record at Each Level,但那是 SAS SQL 实现受到更多限制 - 使用这种方法,我最终不得不在每个级别创建临时表然后联合最终结果,这是混乱的。试图找到更清洁的解决方案。
【问题讨论】:
-
层次结构中有已知的层数吗?
-
@dnoeth 就本练习而言,16 个级别就足够了。
标签: sql parent-child teradata hierarchy