我有一张员工和经理的桌子。
create table hrc (
id int,
employee varchar(255),
manager varchar(255)
);
insert into hrc
values
(1, "A", Null),
(2, "B", "A"),
(2, "C", "B"),
(2, "D", "B"),
(2, "E", "C"),
(2, "E", "D"),
(2, "F", "C"),
(2, "G", "F"),
(2, "H", "E");
因此,此表与所有可用的层次结构 cte 示例的不同之处在于“一名员工可以拥有两名以上的经理”。
我想获取“B”层次结构中的所有员工。我已经尝试过这个,但下面的代码但它不起作用
with hierarchy as
(
select emp, 1 as lvl
from hrc
where emp = 'B'
union all
select h.emp, lvl+1
from hierarchy as h
join hrc as t
on h.emp = t.mang
)
select * from hierarchy
预期结果
B C D 乙
此处使用递归 CTE 是正确的。虽然我不完全理解你想要的结果,但你应该做这样的事情
DROP TABLE IF EXISTS hrc;
create table hrc (
id int,
emp varchar(255),
man varchar(255)
);
insert into hrc
values
(1, 'A', Null),
(2, 'B', 'A'),
(2, 'C', 'B'),
(2, 'D', 'B'),
(2, 'E', 'C'),
(2, 'E', 'D'),
(2, 'F', 'C'),
(2, 'G', 'F'),
(2, 'H', 'E');
with hierarchy as
(
select emp, 1 as lvl
from hrc
where emp = 'B'
union all
select t.emp, lvl+1 as lvl
from hierarchy as h
inner join hrc as t
on h.emp = t.man
)
select * from hierarchy
order by lvl
;