Sql 子ID为的Oracle递归内部联接
我正在开发一个具有以下结构的产品数据库:Sql 子ID为的Oracle递归内部联接,sql,oracle,hierarchical-data,Sql,Oracle,Hierarchical Data,我正在开发一个具有以下结构的产品数据库: ID | ChildID 1 1 2 2 2 3 2 4 2 5 3 null 4 8 5 6 6 null 8 null 当ID=ChildID时,它是一个“header”行。 当ChildId=null时,它是层次结构中的最后一个节点(显然) 我想要的是完整的层次结构。 我尝试过使用'with'子句进行一些查询,但由于它的结构,我无法使其正常工作 有什么建议吗 查找项“2”的层
ID | ChildID
1 1
2 2
2 3
2 4
2 5
3 null
4 8
5 6
6 null
8 null
当ID=ChildID时,它是一个“header”行。
当ChildId=null时,它是层次结构中的最后一个节点(显然)
我想要的是完整的层次结构。
我尝试过使用'with'子句进行一些查询,但由于它的结构,我无法使其正常工作
有什么建议吗
查找项“2”的层次结构时的预期输出
ID | ChildID
2 2
3 null
4 8
5 6
6 null
8 null
“标题”行和任何数据之间似乎没有链接。假设您缺少一行
(1,2)
,这就是您想要的吗
select rpad(' ', 2*(level-1)) || id as padded_id, childid
from t42
start with childid = id
connect by nocycle prior childid = id
order by id, childid;
PADDED_ID CHILDID
---------- ----------
1 1
1 2
2 3
2 4
2 5
3
4 8
5 6
6
9 rows selected
您可以阅读。那么,预期的输出是什么?您获取整个层次结构的确切含义是什么?我是说你想要什么样的结果?唱片集?如果是,每条记录将包含什么?这是一个交叉点(连接点)表吗?也就是说,ID和CHILD_ID是否链接到另一个表?无论哪种方式,这都是构建事物的一种不同寻常的方式。大多数层次结构都是由链接回其主节点的子节点定义的。我已经编辑了这个问题。这不是一个交集表。所以在预期的输出中,
2,2
行来自哪里?因为2是查询中的根,所以只合成它?以及8,null
行?看起来6和8都是叶子,但是输入在它们之间有区别(6有一个空的子项,8没有),这在您的预期输出中没有维护。