克里斯,
你只得到3行,因为你的顶层行不设置应该的方式来处理层次查询。通常情况下,顶级行或Oracle着名的EMP表中的总裁KING都没有经理。在你的情况下,你不应该把17389的参数设置为17389本身,而是设置为NULL。要么相应地更新表格,要么使用视图来适应这种情况。
一个例子:
SQL> select empno
2 , mgr
3 from emp
4 where empno in (7876,7788,7566,7839)
5/
EMPNO MGR
---------- ----------
7566 7839
7788 7566
7839 7839
7876 7788
4 rijen zijn geselecteerd.
EMP表的这一部分有四个级别设置为自身其顶部水平行(7839)。与您的EMPID 17839.这使用您的查询导致只有三行:
SQL> select level
2 , empno
3 , mgr
4 from emp
5 connect by nocycle prior mgr = empno
6 start with empno = 7876
7/
LEVEL EMPNO MGR
---------- ---------- ----------
1 7876 7788
2 7788 7566
3 7566 7839
3 rijen zijn geselecteerd.
要么使用一个(内联)视图设置经理/ parentId的列设置为空的顶级:
SQL> select level
2 , empno
3 , mgr
4 from (select empno
5 , nullif(mgr,empno) mgr
6 from emp
7 )
8 connect by nocycle prior mgr = empno
9 start with empno = 7876
10/
LEVEL EMPNO MGR
---------- ---------- ----------
1 7876 7788
2 7788 7566
3 7566 7839
4 7839
4 rijen zijn geselecteerd.
或修复您的数据UPDATE语句:
SQL> update emp
2 set mgr = null
3 where empno = 7839
4/
1 rij is bijgewerkt.
SQL> select level
2 , empno
3 , mgr
4 from emp
5 connect by nocycle prior mgr = empno
6 start with empno = 7876
7/
LEVEL EMPNO MGR
---------- ---------- ----------
1 7876 7788
2 7788 7566
3 7566 7839
4 7839
4 rijen zijn geselecteerd.
而且你可以离开了NOCYCLE关键字以及,你做固定后。
Regards, Rob。
不幸的是,这不起作用。 顶层将有一大堆的2级的,但我只希望在上述水平4.思考的员工,经理,总监,副总裁层次结构中的2级 - 导演和VP可以看到员工创建的数据,但另一向该董事报告的经理不能。 – chris 2009-05-21 14:42:17