检索层次结构的上升行

时间:2018-01-15 15:33:11

标签: sql oracle connect-by

我有一个包含3列的示例表:idparent_idname

假设我的表中存在的层次结构如下:

I
  I.A
    I.A.a
    I.A.b
      I.A.b1
      I.A.b2
  I.B
  I.C
II
  II.A 

我的目标是检索给定行的所有优先级。例如,对于I.A.b2,结果将是:

I
I.A
I.A.b
I.A.b2

我尝试使用以下connect-by查询,但没有成功:

 SELECT name
 FROM test 
 where id = 7 -- 7 is the id of I.A.b2 in my example
 CONNECT BY PRIOR id = parent_id
 START WITH parent_id is null;

任何建议都会有所帮助

1 个答案:

答案 0 :(得分:3)

诀窍是以相反的顺序(从结尾处开始)浏览记录,然后使用order by按顺序颠倒顺序,如下所示:

SELECT     name
FROM       test 
CONNECT BY PRIOR parent_id = id
START WITH id = 7
ORDER BY   rownum DESC

要获取树中每条记录的级别,您可以使用row_number()分析函数:

SELECT     ROW_NUMBER() OVER (ORDER BY rownum DESC), name
FROM       test 
CONNECT BY PRIOR parent_id = id
START WITH id = 7
ORDER BY   rownum DESC