하드 코드 ('쉽게 해결할 수있는 루트') '또는 여러 개의 뿌리에 대한보다 일반적인 해결책을 원할지 여부가 명확하지 않습니다. 당신이 어떤 루트에 대한보다 일반적인 솔루션을 원하는 경우
create table child_parent (
parent varchar2(2),
child varchar2(2)
);
insert into child_parent values (null, 'a');
insert into child_parent values ('a', 'b');
insert into child_parent values ('b', 'c');
insert into child_parent values ('c', 'd');
insert into child_parent values ('c', 'e');
insert into child_parent values (null, 'k');
insert into child_parent values ('k', 'l');
insert into child_parent values ('l', 'm');
insert into child_parent values ('l', 'n');
with choose_root_here as (
select 'a' as root from dual
)
select
choose_root_here.root || '->' || child from
(
select
level lvl,
connect_by_isleaf leaf,
cp.parent,
cp.child
from
child_parent cp
connect by nocycle prior cp.child= cp.parent
start with
cp.child='a'
)
cross join choose_root_here
where
leaf = 1;
는이
편집는, 부모에 대한 null 일 수 없습니다 도움이 될 수 있습니다 :
을 전 가정하면, 다음이 당신이 가고 얻을 수 있습니다
select
substr(regexp_replace(path, '##(\w+).*##(\w+)', '\1->\2'),1,30) path
from (
select
level lvl,
substr(sys_connect_by_path(child, '##'),1,20) path,
connect_by_isleaf leaf,
cp.parent,
cp.child
from
child_parent cp
connect by nocycle prior cp.child= cp.parent
start with
cp.parent is null
)
where leaf = 1;
답장을 보내 주셔서 감사합니다. 나는 특정 가치를 위해 그것을 하드 코딩하고 싶지 않다. 나는 그것을 일반적으로 만들고 싶다. 당신이 "child_parent values (null, 'a');에 삽입 한 것처럼 값을 입력 할 수 없다. –
null로 부모를 입력 할 수 없다면 부모를 어떻게 식별합니까? –
그냥 열 값을보고. 'a'에 대한 부모를 나타내는 행이 없으면 'a'에 부모가 없음을 의미합니다. –