从Oracle获取树/层次结构数据的最佳方法是什么?

时间:2011-04-12 15:57:54

标签: oracle tree hierarchical-data

我想从具有以下定义的表中获取下面的Hierarchical / Tree数据。

Tree Table:
"""""""""""
Id   |ParentId
"""""""""""
Work1|null
Work2|Work1
Work3|Work2
...

必需的查询结果数据(不需要选项卡) - 如果我选择'Work1',我应该完成其根目录下的ID。如果我选择'Work2',那么我也应该在其根之上和之下完成ID。

> Work1 
----------
>   Work2
----------
>     Work3
---------

我使用了以下查询,但它给了我重复的记录。

select Id from TreeTable start with Id in ('Work1','Work2') connect by nocycle Parentid=prior Id or Id = prior Parentid

注意:我希望以 SINGLE QUERY (优化)方式获取数据

谢谢和问候, PV。

1 个答案:

答案 0 :(得分:2)

SELECT  id
FROM    q
START WITH
        id IN ('Work1', 'Work2')
CONNECT BY
        parent = PRIOR id
        AND id NOT IN ('Work1', 'Work2')

这个条件:

AND id NOT IN ('Work1', 'Work2')

将切断已使用START WITH选择的分支。