【发布时间】:2021-10-25 23:09:15
【问题描述】:
我试图在 Oracle 中使用分层查询来实现如下所述的结果,尝试了使用 CONNECT_BY_ROOT、CONNECT BY PRIOR 的各种方法……但不知何故无法进入所需的结果。
CREATE TABLE test (
id int,
name varchar2(75),
parentid int,
class int
);
INSERT into test values (1, 'BOSS',null,null);
INSERT into test values (2, 'C1',1, 0);
INSERT into test values (34, 'C2',2, 1);
INSERT into test values (37, 'C3',34, 2);
INSERT into test values (50, 'C4',37, 2);
INSERT into test values (51, 'C5',50, 4);
INSERT into test values (100, 'C6',37, 4);
INSERT into test values (101, 'C7',37, 5);
在查询中,如果我传递 'C4 的 id=50 和 class=4,那么它应该返回它的孩子,即 C5(其 parentid 为 50),同时它还应该获取 C6(因为这是 C4 的父母的孩子即 C4 的父级是 C3,它有一个子级 C6,即 parentid 37)
51 C5 50 -- This is Child of C4 i.e. C5's parent=50
100 C6 37 -- This is because C4 parent is C3 and in turn C3 has another child C6 of same class
我从一些基本查询开始并进行了一些更改以获取所需的结果但没有成功...我知道这是不正确的...并且遗漏了一些
SELECT distinct id, name, parentid
FROM test
CONNECT BY PRIOR id =parentid
START WITH id=50
order by 1 ;
(编辑文本)
SELECT
distinct id, name, parentid,
connect_by_root id ,
sys_connect_by_path(name,' > ') as full_path,
CONNECT_BY_ROOT id cbr,
CONNECT_BY_ISLEAF AS leaf
FROM test
CONNECT BY PRIOR id =parentid
START WITH id=50
order by 1 ;
(编辑过的文字) 预期输出:
51 C5 50
100 C6 37
【问题讨论】:
-
你期望的输出是什么?
-
谢谢罗伯特,我期待下面的输出(我已经在我最初的帖子中提到了这一点,因为我的期望原因,如果你错过了任何机会:))ROW1---- 51 C5 50 ROW2---- 100 C6 37
标签: oracle