具有子ID的Oracle递归INNER JOIN

时间:2013-06-28 09:09:35

标签: 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时,它是一个“标题”行。 当ChildId = null时,它是层次结构中的最后一个节点(显然) 我想得到的是完整的层次结构。 我已尝试使用'WITH'子句进行一些查询,但由于它的结构,我无法使其工作。

有什么建议吗?

当我查找项目'2'

的层次结构时的预期输出
ID | ChildID
2    2
3    null
4    8
5    6      
6    null
8    null

1 个答案:

答案 0 :(得分:0)

您似乎没有“标题”行与任何数据之间的链接。假设你错过了(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 

您可以阅读hierarchical queries in the docuemntation