通过 SQL 查询或函数获取依赖对象列表
Get list of dependent objects via SQL query or function
我有两个 table。一个是任务,第二个是任务的依赖性 table。
我想要一个查询根据特定的 id 给我所有的任务(递归地)。
我有两个 table。一个用于任务
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
格式并不重要。只需要输出
I need to join two tables and then do a recursive search.
您必须通过 DEPENDENT_ON OUTER JOIN 第二个 table(您没有命名,所以我将其命名为 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. If you don't want to use Oracle's proprietary hierarchical syntax, from 11gR2 Oracle supported recursive WITH clause. Find out more.
顺便说一句,您发布的数据包含错误。任务 4 取决于任务 2 和任务 6。层次结构必须具有依赖于单个父节点的子节点。否则你会得到各种奇怪的结果。
我有两个 table。一个是任务,第二个是任务的依赖性 table。 我想要一个查询根据特定的 id 给我所有的任务(递归地)。
我有两个 table。一个用于任务
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
格式并不重要。只需要输出
I need to join two tables and then do a recursive search.
您必须通过 DEPENDENT_ON OUTER JOIN 第二个 table(您没有命名,所以我将其命名为 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. If you don't want to use Oracle's proprietary hierarchical syntax, from 11gR2 Oracle supported recursive WITH clause. Find out more.
顺便说一句,您发布的数据包含错误。任务 4 取决于任务 2 和任务 6。层次结构必须具有依赖于单个父节点的子节点。否则你会得到各种奇怪的结果。