【发布时间】:2016-07-24 10:01:24
【问题描述】:
我创建了某种“依赖项”表,其中包含我们夜间流程的全部依赖项。
表格如下所示:
GRAND_MODEL | WAIT_4_MODEL_NAME
test test1
test test2
test test3
test2 test3
test3 test4
test4 test5
这个表意味着 -> test 需要等待 test1 , test2 , test3 才能完成,但还需要等待 test4 和 test5 ,因为 test3/4等着他们。
test1 不等待任何东西,test2 等待 test3,因此也等待 test4,因此也等待 test5。
所以结果应该是这样的:
FIRST_MODEL | SECOND_MODEL | THIRD_MODEL | FORTH_MODEL | FIFTH_MODEL | SIXTH_MODEL
test5 test4 test3 test2 test NULL
test5 test4 test3 test NULL NULL
test4 test3 test2 test NULL NULL
.................................
我尝试过的:
SELECT distinct prior wait_4_model_name as first_m,
wait_4_model_name as second_m,
grand_model as third_m
from (SELECT distinct grand_model, wait_4_model_name
FROM DEL_SAGI_FOR_HIERARCHY)
connect by NOCYCLE prior grand_model = wait_4_model_name
但这只会生成层次结构的第一级。
提前致谢。
编辑:请注意,可能存在相反的依赖关系,test 等待 test1 和 test1 等待 test (每个模型都很大,因此可能有一部分模型等待另一个模型的一部分)
【问题讨论】:
-
你知道层次结构的最大层数吗?
-
不,但可以说 9 就足够了。 @MT0
-
关于您的编辑:因此,如果存在相互依赖关系,您将拥有无限序列,不是吗?那么期望的输出是什么?你是否以“CONNECT BY NOCYCLE”的方式打破循环?