显示管理器下的所有用户(直接或间接) - SQL

Posted

技术标签:

【中文标题】显示管理器下的所有用户(直接或间接) - SQL【英文标题】:Display all users(directly or indirectly) under a manager - SQL 【发布时间】:2020-01-27 17:16:41 【问题描述】:

我有一个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;

如果我可以使用游标和过程获得解决方案,那也可以。

【问题讨论】:

GROUP_CONCAT 不是sql-server 函数。你的意思是mysql?您能否使用正确的标签更新您的问题? 抱歉。我是 SQL 新手。如果您也可以为此提供一个 sql-server 查询,我将不胜感激。 也许这个帖子可以帮助你Mysql-hierarchical-recursive-query。 【参考方案1】:

您的查询是正确的,它给出了预期的输出:

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)

【讨论】:

这只满足我的第一个用例,而不是第二个。在 103 下,我想显示 104 以及 101 和 103,因为它们也有间接报告。 对不起,我的错,我错过了用户和“二级”经理之间的“间接”联系,我会尽快编辑我的答案【参考方案2】:

您可以考虑切换到嵌套集合模型:

user_id lft rgt
    102   1   8
    101   2   3
    103   4   7
    104   5   6

否则,请确认您使用的是哪个数据库/版本。

【讨论】:

我使用的是 MYSQL 版本 5.5.62

以上是关于显示管理器下的所有用户(直接或间接) - SQL的主要内容,如果未能解决你的问题,请参考以下文章

解决,设备管理器下无端口 或 其他设备(开发板)无法连接到主机 的问题

Android虚拟设备管理器下的“擦除数据”功能究竟是做啥的

Oracle可以像sql server与my sql那样,直接点击树结构那里的数据库名,就可以查看数据库下的所有表吗?

项目管理常见经济学术语

Debezium Mysql连接器解析器下的IncompatibleClassChangeError

ue4太阳光下阴影有断点