我有一个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,LeninE 213的经理。
所以我运行了一个这样的查询:
select * from employee where manager=7;我得到的结果是2行,Gill和Nancy。
但是现在,我还想在输出中向员工展示Ben和John,Lenin,因为他们都在管理器Gill和NancyE 228下,他们都在E 129SamE 230下。
如何构造查询以分层显示经理的员工?换句话说,如何才能在经理E 141SamE 242下显示所有Gill、Nancy、Ben、John和LeninE 240?
发布于 2012-06-15 13:26:38
在WHERE子句中添加IN子查询将处理这个问题。例如:
SELECT * FROM employee WHERE manager = 7 OR manager IN (SELECT id FROM employee WHERE manager = 7)发布于 2012-06-15 13:43:42
为了获得更好的视觉效果,还可以使用以下查询:
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或其他。
https://stackoverflow.com/questions/11051506
复制相似问题