2016-07-06 91 views
-3

我有一个SQL表worker与字段:SQL查询来获取所有的经理

1. id 
2. Name 
3. Manager id 

我试图写一个查询来获取以下字段(“ID”,“名称”列表,”管理员ID“,”经理姓名“)

请注意,经理ID也属于工作人员即经理也是一名工人。此外,经理还拥有一个再次属于同一个表的经理 - 层级可以增加到n个经理(未知)。

到目前为止,这是查询我

SELECT tab1.user_name, tab1.user_id, tab1.manager_id, tab2.name AS manager_name, 1 AS LEVEL FROM (SELECT tab1.name AS user_name, tab1.id AS user_id, manager_id FROM DB.user tab1 WHERE id = 1 AND active = 1) tab1 LEFT JOIN DB.user tab2 ON tab1.manager_id = tab2.id UNION SELECT tab1.user_name, tab1.user_id, tab1.manager_id, tab2.name AS manager_name, 2 AS LEVEL FROM (SELECT tab1.name AS user_name, tab1.id AS user_id, manager_id FROM DB.user tab1 WHERE manager_id = 1 AND active = 1) tab1 LEFT JOIN DB.user tab2 ON tab1.manager_id = tab2.id UNION SELECT tab1.user_name, tab1.user_id, tab1.manager_id, tab2.name AS manager_name, 3 AS LEVEL FROM (SELECT tab1.name AS user_name, tab1.id AS user_id, manager_id FROM DB.user tab1 WHERE manager_id IN (SELECT tab1.id FROM DB.user tab1 WHERE manager_id = 1 AND active = 1) AND active = 1) tab1 LEFT JOIN DB.user tab2 ON tab1.manager_id = tab2.id

但是,这让我结果高达层次结构的第三级,而我需要它来进行自我扩张,去给我拿结果不管是什么级别的嵌套存在。

有人可以帮忙吗。

+3

你到目前为止尝试过什么? http://stackoverflow.com/questions/16232426/get-all-employee-who-directly-or-indirectly-reports-to-an-employee-with-hierarc – mohan111

+2

听起来像作业。告诉我们你试过的东西,以及你卡在哪里。 –

+0

对不起,我的不好,我拼错了这个要求,所需要的是通过经理身份让所有的工人进入管理人员。 –

回答

1
select w1.id, w1.name, w2.id as manager_id, w2.name as manager_name 
from worker as w1 inner join worker w2 on w1.manager_id = w2.id