Иерархические запросы - 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;
Оба дадут одинаковый ответ.