Иерархические запросы - Oracle

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

введите описание изображения здесь

Мой вход - идентификатор риска. Как я могу получить родительский уровень для идентификатора входного риска.

Если я даю 25 в качестве входных данных, я должен получить 23 в качестве выходных данных. Как я могу добиться этого.

1 ответ

Решение

Начиная с требуемой строки и восходя к корню:

SELECT RiskID,
FROM   PROJECT_RISKS
WHERE  CONNECT_BY_ISLEAF = 1
START WITH
       RiskID    = 25
CONNECT BY
       PRIOR Link2 = Link1
AND    PRIOR ProjectID = ProjectID;

Начиная с корня и спускаясь к нужной строке:

SELECT  CONNECT_BY_ROOT( RiskID ) AS RiskID
FROM    Project_Risks
WHERE   RiskID    = 25
START WITH
        link2     IS NULL
CONNECT BY
       PRIOR Link1 = Link2
AND    PRIOR ProjectID = ProjectID;

Оба дадут одинаковый ответ.

Другие вопросы по тегам