编写返回层次结构所有成员的查询

Writing a query returning all members of a hierarchy

我在编写对我的水平来说似乎相当复杂的查询时遇到了问题。

问题很简单:只用了一个tableressources(id_ressource, name, id_manager)

如您所料,id_manager 指的是另一个 id_ressource。我想要的是获得特定经理下所有资源的列表。但是一个经理可能会被其他经理的经理等等:我想把所有的资源都归他所有,包括经理自己。

到目前为止我的查询是最简单的:

SELECT name FROM ressources WHERE id_manager = :MANAGER_VAR;

我知道我可能会使用其中的一些 CONNECT BY, PRIOR,但我几乎没有使用它的经验,非常感谢任何帮助。

从 Oracle 11gR2 开始,您可以使用标准递归 CTE 而不是旧的 CONNECT BY

例如:

with
n (id_ressource, name, id_manager) as (
  select * from resources where id_manager = 123 -- starting point
 union all
  select r.*
  from n
  join ressources r on r.id_manager = n.id_ressource
)
select * from n

应该适用于 CONNECT BY(我的 Oracle 知识有点生疏)。假设您有 table 员工关系:employees(id_employee, id_manager)

SELECT DISTINCT r.name
FROM ressources r
JOIN employees e on r.id_manager = e.id_employee
START WITH r.id_manager = :MANAGER_VAR
CONNECT BY PRIOR e.id_employee= r.id_manager 

分层查询 (connect by) 如下所示:

select  name
from    ressources               --  check your spelling?
start   with id_ressource = :manager_var
connect by   id_manager   = prior id_ressource
;

这里:manager_var是输入变量(绑定变量,如您尝试的那样)。