克里斯,
你只得到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