Узел корневого уровня не приходит в результате - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в иерархических запросах Oracle. У меня есть одна таблица, и у меня есть данные ниже.

Таблица данных Данные результата У меня вопрос, почему родительский идентификатор (100) не включен в результат? Ниже приведен запрос.

select id, lpad(' ',4*(LEVEL - 1)) || CHILD CHILD, LEVEL
from temp
START WITH PARENT = 100
CONNECT BY  PARENT = PRIOR CHILD;

С уважением, Бхушан

1 Ответ

1 голос
/ 02 апреля 2019

Если вы включаете начальное значение в свой вывод, тогда используйте union all:

select 0 id, '100' child, 0 lvl from dual
union all
select id, lpad(' ', 4 * level ) || child, level 
  from temp
  start with parent = 100
  connect by  parent = prior child

или рекурсивный CTE:

with c(id, child, lvl) as (
    select 0, '100', 0 from dual 
    union all
    select t.id, lpad(t.child, (c.lvl + 2) * 4, ' '), c.lvl + 1 
      from c join temp t on t.parent = c.child)
search depth first by id set seq
select id, child, lvl from c;

или сначала добавьте его к исходным данным:

select id, lpad(' ', 4 * (level-1) ) || child child, level 
  from (select id, parent, child from temp union all
        select null, null, 100 from dual )
  start with child = 100
  connect by  parent = prior child

демо со всеми запросами

...