如何在mysql中获取经理的员工层次结构?

时间:2012-06-15 13:23:21

标签: mysql join

我有一个employee表,其中包含以下数据。 对于特定的经理,我希望获得所有员工的列表,遵循经理的层次结构。

id  name    manager

1   John    6
2   Gill    7
3   Ben     2
4   Roy     8
5   Lenin   6
6   Nancy   7
7   Sam     0
8   Dolly   3

例如,我必须让经理 Sam (7)下的员工。如您所见, Sam 没有任何经理,但他是员工 Gill Nancy 的经理,他们是员工的经理 Ben John,Lenin

所以我运行了这样的查询:

select * from employee where manager=7;

我将结果显示为2行, Gill Nancy

但是现在,我还想在输出中向员工 Ben John Lenin 展示,因为他们都在经理之下 Gill Nancy Sam

如何构建查询以按层次结构显示员工?换句话说,我怎样才能展示所有 Gill Nancy Ben John Lenin < / strong>经理 Sam

2 个答案:

答案 0 :(得分:2)

在WHERE子句中添加IN子查询将处理该问题。例如:

SELECT * FROM employee WHERE manager = 7 OR manager IN (SELECT id FROM employee WHERE manager = 7)

答案 1 :(得分:2)

为了获得更好的视觉效果,您还可以使用此查询:

select e1.name, e2.name, e3.name 
from employee e1 
left join employee e2 on e1.id = e2.manager
left join employee e3 on e2.id = e3.manager
where e2.manager = 7

而您必须为每个层次结构添加另一个left join。一方面这是一个缺点,另一方面它比肖恩的答案更容易处理。

在专业方面,你会得到这样的输出:

name        name1       name2
---------------------------------
Sam         Gill        Ben     
Sam         Nancy       John    
Sam         Nancy       Lenin   

更友好,你可以通过PHP或其他东西轻松地将它放在一个更友好的形式。