我有一个emp表,如下所示:
userID varchar(10)
ManagerID varchar(10)
数据:
UserID ManagerID
101 102
103 102
104 103
我需要直接或间接找到经理下的所有用户。
输出应如下:
如果是102:
Manager ReportingUsers
--------------------------
102 101,103
如果我们检查104,输出应该是:
Manager ReportingUsers
--------------------------
104 102,101,103 `
我为实现此目的而编写的查询如下
SELECT managerID, GROUP_CONCAT(userID) FROM emp GROUP BY managerID;
但是我得到的输出满足第一个输出,但不满足第二个:
+-----------+----------------------+
| MANAGERID | GROUP_CONCAT(USERID) |
+-----------+----------------------+
| 102 | 101,103 |
| 104 | 102 |
+-----------+----------------------+
如何使用游标和存储过程实现此用例,从而可以为每个管理器获取输出?
只是更新如果我使用下面的查询,我也可以得到第二个示例的结果,但是第一个示例的102却不满意:
SELECT m.MANAGERID, GROUP_CONCAT(m.USERID,';',(Select Group_Concat(n.USERID) from emp as n where m.userID=n.managerID or n.managerID=NULL group by n.managerID)) as ReportingUsers FROM emp as m GROUP BY managerID;
如果我可以使用游标和也可以使用的程序来获得解决方案。
答案 0 :(得分:0)
您的查询是正确的,它会提供预期的输出:
mysql> select * from testdb.hierarchy;
+--------+-----------+
| userID | managerID |
+--------+-----------+
| 101 | 102 |
| 103 | 102 |
| 104 | 103 |
+--------+-----------+
3 rows in set (0.00 sec)
mysql> select managerID, group_concat(userID) from hierarchy group by managerID ;
+-----------+----------------------+
| managerID | group_concat(userID) |
+-----------+----------------------+
| 102 | 101,103 |
| 103 | 104 |
+-----------+----------------------+
2 rows in set (0.00 sec)
答案 1 :(得分:0)
您可以考虑切换到嵌套集模型:
user_id lft rgt
102 1 8
101 2 3
103 4 7
104 5 6
否则,请确认您正在使用哪个数据库/版本。