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没有),这在您的预期输出中没有维护。