Крис,
Вы получаете только 3 строки, потому что ваша строка верхнего уровня не настроена так, как она должна обрабатывать иерархические запросы. Обычно в строке верхнего уровня, или президент KING в хорошо известной таблице EMP Oracle, нет менеджера. В вашем случае вы должны установить не парентид 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.
Либо используйте (встроенное) представление, чтобы установить для столбца 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.
С уважением,
Роб.