我有两个桌子。一个用于任务,第二个用于任务的依赖表。 我希望查询根据特定的ID(递归地)给我所有任务。
我有两个桌子。一个用于任务
ID TASK
1 Abc
2 Def
3 Ghi
4 Jkl
5 Mno
6 Pqr
第二个是获取依赖任务
ID DEPENDENT_ON
2 1
3 1
4 2
4 6
5 2
6 5
是否可以编写sql查询以获取依赖于特定任务的所有任务(递归)的列表。
示例。
我想检查所有依赖于ID = 1的任务。
预期输出(分别为2和3):
2.Def
3.Ghi
此外,查询还应提供这两个相关任务的输出,依此类推。 最终输出应为:
2.Def -- level one
3.Ghi -- level one
4.Jkl -- Dependent on task 2
5.Mno -- Dependent on task 2
6.Pqr -- Dependent on task 5
格式化并不重要。仅输出是必需的
答案 0 :(得分:0)
我需要联接两个表,然后进行递归搜索。
您必须通过DEPENDENT_ON外部联接第二个表(您没有命名,所以我称它为TASK_TREE)到父ID。外部联接,因为任务1是树的顶部,并且不依赖任何任务。然后使用Oracle的分层查询语法遍历树:
select t.id, t.task, tt.dependent_on, level
from tasks t
left outer join task_tree tt on tt.id = t.id
connect by prior t.id = tt.dependent_on
start with t.id = 1
/
我包括了level
,因此您可以看到树如何展开。 Oracle SQL文档详细介绍了层次结构查询。 Find out more。如果您不想使用Oracle专有的分层语法,请从11gR2开始使用Oracle支持的递归WITH子句。 Find out more。
偶然地,您发布的数据包含错误。任务4同时依赖于2和6。层次结构必须具有依赖于单个父节点的子节点。否则,您会得到各种各样的奇怪结果。