克里斯,
您只得到 3 行,因为您的顶级行未设置为处理分层查询的方式。通常,Oracle 著名的 EMP 表中的顶级行或总裁 KING 没有经理。在您的情况下,您不应将 17389 的 parentid 设置为 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 关键字。
问候,罗布。