クリス、
最上位の行が階層クエリを処理する方法に設定されていないため、3行しか取得できません。通常、最上位の行、またはOracleのよく知られているEMPテーブルのKING社長には、マネージャーがいません。あなたの場合、17389の親IDを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)がそれ自体に設定された4つのレベルがあります。empid 17839と同じです。これにより、クエリを使用すると3行のみになります。
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.
(インライン)ビューを使用して、最上位レベルのmgr/parentid列をnullに設定します。
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キーワードを省略できます。
よろしく、ロブ。