3

我有一张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没有任何经理,但他是员工GillNancy的经理,他们分别是员工BenJohn, Lenin的经理。

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

select * from employee where manager=7;

我得到的结果为 2 行,GillNancy

但是现在,我还想在输出中显示员工BenJohnLenin,因为他们都在经理GillNancy的领导下,他们在Sam的领导下。

如何构建查询以分层显示经理的员工?换句话说,我怎样才能显示经理Sam领导下的所有GillNancyBenJohnLenin

4

2 回答 2

2

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

SELECT * FROM employee WHERE manager = 7 OR manager IN (SELECT id FROM employee WHERE manager = 7)
于 2012-06-15T13:26:38.100 回答
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 或其他方式轻松地将其以更眼睛友好的形式呈现。

于 2012-06-15T13:43:42.373 回答