Каков наилучший способ получить данные о древовидной / иерархической структуре из Oracle? - PullRequest
1 голос
/ 12 апреля 2011

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

Tree Table:
"""""""""""
Id   |ParentId
"""""""""""
Work1|null
Work2|Work1
Work3|Work2
...

Обязательные данные результата запроса (вкладка не требуется) - если я выберу 'Work1', я должен заполнить идентификаторы, которые находятся под его корнем, как показано ниже. Если я выберу «Work2», то я также должен заполнить идентификаторы выше и ниже его корня.

> Work1 
----------
>   Work2
----------
>     Work3
---------

Я использовал приведенный ниже запрос, но он дает мне повторяющиеся записи.

select Id from TreeTable start with Id in ('Work1','Work2') connect by nocycle Parentid=prior Id or Id = prior Parentid

Примечание. Я хочу получить данные в ОДНОМ ЗАПРОСЕ (оптимизированном) пути

Спасибо и С уважением, PV.

1 Ответ

2 голосов
/ 12 апреля 2011
SELECT  id
FROM    q
START WITH
        id IN ('Work1', 'Work2')
CONNECT BY
        parent = PRIOR id
        AND id NOT IN ('Work1', 'Work2')

Это условие:

AND id NOT IN ('Work1', 'Work2')

отрежет ветви, уже выбранные с помощью START WITH.

...