У меня есть таблица, как показано ниже -
ID | NAME | PARENT
1 | Global | null
2 | USA | 1
3 | Canada | 1
4 | USA-1 | 2
5 | USA-11 | 4
Родитель столбца относится к идентификатору столбца, т. Е. Global является root. Для США-11 США-1 - родитель, США - прародитель, а Глобал - пра-прародитель. Это грубая иерархия, которая может go подниматься до любого уровня . Мне нужна помощь в написании запроса, который расширит эту иерархию следующим образом -
ID | NAME | PARENT | Distance_from_parent
1 | Global | Global | 0
2 | USA | USA | 0
2 | USA | Global | 1
3 | Canada | Canada | 0
3 | Canada | Global | 1
4 | USA-1 | USA-1 | 0
4 | USA-1 | USA | 1
4 | USA-1 | Global | 2
5 | USA-11 | USA-11 | 0
5 | USA-11 | USA-1 | 1
5 | USA-11 | USA | 2
5 | USA-11 | Global | 3
Так что, если вы заметили, я повторяю каждое имя местоположения относительно себя и его иерархии. Столбец «distance_from_parent» - это расстояние от родителя, упомянутого в столбце «Parent».
Я пробовал это использовать Connect By, Level и ранее, но не смог достичь такого вида вывода.
DDL для этого -
create table subsidiary (id number, name varchar2(50), parent number);
insert into subsidiary (id, name, parent) values (1, 'Parent', null);
insert into subsidiary (id, name, parent) values (2, 'USA', 1);
insert into subsidiary (id, name, parent) values (3, 'Canada', 1);
insert into subsidiary (id, name, parent) values (4, 'USA-1', 2);
insert into subsidiary (id, name, parent) values (5, 'USA-11', 4);