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

unhi4e5o  于 2021-07-27  发布在  Java
关注(0)|答案(3)|浏览(360)

我在写一个对我来说相当复杂的查询时遇到了困难。
问题很简单:它只使用一个表 ressources(id_ressource, name, id_manager) 你可能猜到了, id_manager 指另一个 id_ressource . 我想要的是得到一个特定经理下所有资源的列表。但是一个管理者可能会被其他管理者的管理者所控制,等等:我想让所有的资源都在他手下,包括管理者自己。
到目前为止,我的问题是最简单的:

SELECT name FROM ressources WHERE id_manager = :MANAGER_VAR;

我知道我可能用了一些 CONNECT BY, PRIOR ,但我几乎没有这方面的经验,如果有任何帮助,我将不胜感激。

jq6vz3qz

jq6vz3qz1#

分层查询( connect by )看起来像这样:

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

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

bweufnob

bweufnob2#

从oracle11gr2开始,您可以使用标准的递归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
qltillow

qltillow3#

应该为你工作 CONNECT BY (我的甲骨文知识有些生疏)。假设你有一张员工关系表: 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

相关问题