我想获取一个组织中最终向给定人员(组织结构图的扁平化子树)报告的员工列表。我创建了一个示例组织(在SQLite中为view on DB Fiddle),其中john
作为老板,他有两个报告(luc
和bob
),bob
有一个报告(steve
)。
为了给递归查询播种,我想使用nickname
(并获得nickname
的列表),但人们之间的关系是基于他们的login
。
create table users (
login text,
nickname text,
manager text
);
insert into users values ('john', 'j', NULL), ('luc', 'l', 'john'), ('bob', 'b', 'john'), ('steve', 's', 'bob');
我创建了一个递归查询
WITH orgtree AS (
select login from users where users.nickname='j'
UNION all
SELECT users.nickname FROM users, orgtree
WHERE users.manager=orgtree.login
)
SELECT users.nickname FROM users
WHERE users.nickname IN orgtree ;
我得到的结果只是j
(john
)的“第一行”:
| 绰号|
| --------------|
| l|
| B|
在我的查询中缺少了什么来进行更深入的查询?(在锚或递归成员中?)
1条答案
按热度按时间v2g6jxz61#
直接的问题是CTE的递归成员返回用户的昵称,而您需要他们的登录才能查找下一个层次结构级别。直接解决方法是:
但是我们可以进一步改进查询,通过在递归中跟踪昵称 * 和登录名 *,所以在外部查询中不需要
in
:请注意,我使用的是标准的显式连接,而不是隐式的老式连接。
Demo on DB Fiddle