2013-07-04 23 views
0

我有一个表格,其中两列下面定义了人员和mgr关系。如果我必须把所有属于某个特定经理的人员都取出来,并且它是间接收款人,那么最好的方法是什么?Oracle - 如何有效地进行分层查询

还怎么做具体到一定程度,例如获取特定PERSONID的所有用户高达2级或N等

PERSONID REPORTTO_PERSONID 
2    1 
3    1 
4    1 
5    1 
6    4 
7    4 
8    7 
9    2 
+1

您是否在寻找plsql或java代码? – Johan

+0

您的示例 –

+0

中没有“personid = 1”,这是我的不好......抱歉 –

回答

0

这将找到递归所有的人,将personId = 2

报告

level列表示与在start with条件中指定的行的相对距离。不是层次结构中的整体水平。

select * 
from (
    select personid, 
     reportto_personid, 
     level as lvl 
    from the_table 
    start with personid = 2 
    connect by prior personid = reportto_personid 
) t 
where lvl <= 2; 

更多详细信息are in the manual和所有列在本页右侧的问题。

+0

感谢这个例子,看起来对我很有希望n级别的情况如何? –