У меня есть следующие данные в таблице:
ID PID
B A
C B
D B
E D
G F
H G
I H
Вот сценарий создания / вставки для вашего удобства:
drop table hierarchic_test;
create table hierarchic_test(
id varchar2(1),
pid varchar2(1)
);
insert into hierarchic_test(id, pid) values('B', 'A');
insert into hierarchic_test(id, pid) values('C', 'B');
insert into hierarchic_test(id, pid) values('D', 'B');
insert into hierarchic_test(id, pid) values('E', 'D');
insert into hierarchic_test(id, pid) values('G', 'F');
insert into hierarchic_test(id, pid) values('H', 'G');
insert into hierarchic_test(id, pid) values('I', 'H');
Я пытаюсь получить иерархический запрос, работающий над этимданные.Мои реальные данные будут содержать несколько корней с несколькими листьями.Поэтому начинать с этого нельзя.
Это то, что я до сих пор извлек из документации, которую я нашел в Интернете:
select level, hierarchic_test.* from hierarchic_test
connect by prior hierarchic_test.id = hierarchic_test.pid
order siblings by hierarchic_test.id
Результаты, которые я получаю:
LEVEL ID PID
1 B A
2 C B
2 D B
3 E D
1 C B
1 D B
2 E D
1 E D
1 G F
2 H G
3 I H
1 H G
2 I H
1 I H
Результаты, которые я ожидаю, должны выглядеть следующим образом:
LEVEL ID PID
1 B A
2 C B
2 D B
3 E D
1 G F
2 H G
3 I H
Это также, похоже, документально подтвержденное поведение при здесь .Если я использую start с:
select level, hierarchic_test.* from hierarchic_test
start with hierarchic_test.id = 'A'
connect by prior hierarchic_test.id = hierarchic_test.pid
order siblings by hierarchic_test.id
, я действительно получаю желаемые результаты, но в моих реальных данных будут корни множества, и поэтому я не могу использовать start с.Можете ли вы указать на мою ошибку / указать мне правильное направление?