Нужно показывать внука под ребенком под родителем в Oracle Иерархический запрос
У меня есть таблица, в которой есть дерево штата, региона, района, здания и классы. Каждая строка имеет идентификатор узла и идентификатор родителя. Я использую следующее
select name, child node, parent id from tableA
connect by prior child node = parent id
я получил:
CA
CENTRAL REGION
FRESNO DISTRICT
ST Jim BUILDING
ST joe BUILDING
st tom BUILDING
st sue BUILDING
JIMS CLASS
JOES CLASS
TOM CLASS
SUE CLASS
Проблема в том, что на уровне здания все здания перечислены один за другим, а затем все классы один за другим. Однако я хочу перечислить здание и класс, который является родительским для следующего здания, следующим образом
FRESNO DISTRICT
st jim building
jims class
st joes building
joes class...
идентификатор узла и идентификатор родителя верны, просто все дочерние элементы указаны для родительского, а затем все дочерние элементы для этого дочернего элемента. это не показывает, какой ребенок идет с родителем.
Я хочу показать дерево сверху вниз, например, CA, Центральный регион, район Фресно, здание Св. Джо, класс Ms Mary, Ms
1 ответ
Иерархический порядок должен быть сохранен, если вы не используете ORDER BY без ключевого слова SIBLINGS.
select name, id, parent_id
from tableA
connect by prior id = parent_id
start with parent_id is null
order siblings by name;
Используя эти данные:
create table tableA(id number, name varchar2(100), parent_id number);
insert into tableA
select 1 id, 'CA' name, null parent_id from dual union all
select 2, 'CENTRAL REGION', 1 from dual union all
select 3, 'FRESNO DISTRICT', 2 from dual union all
select 4, 'ST Jim BUILDING', 3 from dual union all
select 5, 'ST joe BUILDING', 3 from dual union all
select 6, 'st tom BUILDING', 3 from dual union all
select 7, 'st sue BUILDING', 3 from dual union all
select 8, 'JIMS CLASS', 4 from dual union all
select 9, 'JOES CLASS', 5 from dual union all
select 10, 'TOM CLASS', 6 from dual union all
select 11, 'SUE CLASS', 7 from dual;