gpt4 book ai didi

Oracle分层查询: how to include top-level parent

转载 作者:行者123 更新时间:2023-12-02 02:16:05 25 4
gpt4 key购买 nike

我有一个分层查询来跟踪报告结构。这几乎可行,只是它没有报告最顶层的节点,可能是因为顶层人员向自己“报告”。

查询是:

select
level,
empid,
parentid
from usertable
connect by nocycle prior parentid= empid
start with empid = 50

这会产生:

LEVEL  EMPID PARENTID               
------ ----- --------
1 50 258
2 258 9555
3 9555 17839

我没有获得 4 级,因为它看起来像:

4      17839 17839

在不更改数据的情况下,有没有办法修改我的查询以便返回所有 4 个级别?目标是获得 empid,这样我就可以检查

id in(分层子查询)

顺便说一句,如果我从查询中删除 nocycle,则会收到错误。

最佳答案

克里斯,

您只得到 3 行,因为您的顶级行没有按照处理分层查询的方式进行设置。通常,顶级行(即 Oracle 著名的 EMP 表中的总裁 KING)没有经理。在您的情况下,您不应将 17389 的parentid 设置为 17389 本身,而应设置为 NULL。相应地更新表,或使用 View 来适应这种情况。

一个例子:

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.

使用(内联) View 将顶层的 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 关键字。

问候,罗布。

关于Oracle分层查询: how to include top-level parent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/893118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com