我在写一个对我来说相当复杂的查询时遇到了困难。
问题很简单:它只使用一个表 ressources(id_ressource, name, id_manager)
你可能猜到了, id_manager
指另一个 id_ressource
. 我想要的是得到一个特定经理下所有资源的列表。但是一个管理者可能会被其他管理者的管理者所控制,等等:我想让所有的资源都在他手下,包括管理者自己。
到目前为止,我的问题是最简单的:
SELECT name FROM ressources WHERE id_manager = :MANAGER_VAR;
我知道我可能用了一些 CONNECT BY, PRIOR
,但我几乎没有这方面的经验,如果有任何帮助,我将不胜感激。
3条答案
按热度按时间jq6vz3qz1#
分层查询(
connect by
)看起来像这样:在这里
:manager_var
是输入变量(bind variable,如您尝试的那样)。bweufnob2#
从oracle11gr2开始,您可以使用标准的递归cte而不是旧的
CONNECT BY
.例如:
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