团队层次结构中的 CTE

问题描述 投票:0回答:1

我有一张员工和经理的桌子。

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 乙

sql common-table-expression
1个回答
-1
投票

此处使用递归 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
;
© www.soinside.com 2019 - 2024. All rights reserved.