Иерархический запрос в Oracle SQL

У меня есть такие данные:

Таблица данных

Из приведенной выше таблицы я пытаюсь написать SQL, используя предложение connect by, чтобы получить такую ​​иерархию

      MAINCONTENT

       SPECIAL
        RIDGE
         SALESCONTENT

       ANOTHERONE
        RODGE
         SOMETHING ELSE
          ANOTHER
        ...

Пока этот SQL ниже показывает только всех моих потомков MAINCONTENT, но я хочу сделать это без передачи параметра. Также этот ниже не показывает мне детей детей, что означает, что он не работает рекурсивно.

    select DISTINCT parent from  MYTABLE
    connect by prior CHILD = PARENT
    start with PARENT = 'MAINCONTENT';

person sbolla    schedule 07.08.2014    source источник


Ответы (1)


Кажется, вы показываете только часть данных в электронной таблице, поэтому я не уверен, что приведенная ниже информация на 100% верна, но:

Сначала избавьтесь от косвенных ссылок (прямые должны охватывать все дерево) и создайте дополнительные записи для записей верхнего уровня. Затем примените иерархическое предложение.

Попробуйте следующее:

WITH mytable_normalized AS (
  SELECT parent, child
    FROM mytable
   WHERE direct_link = 'Y'
   UNION ALL
  SELECT null, parent
    FROM mytable
   MINUS
  SELECT null, child
    FROM mytable
)
SELECT lpad(' ', level*2) || child
  FROM mytable_normalized
CONNECT BY prior child = parent
 START WITH parent IS NULL;
person Kombajn zbożowy    schedule 07.08.2014