我有一个名为“ employees”的表,其中包含一些数据,例如员工ID,员工名称和经理ID。
我已经加入了它,以显示每个经理下的下属人数。
看起来像这样,并且运作良好:SQL fiddle link
该表如下所示:
CREATE TABLE employees (
emp_id INT,
emp_name VARCHAR(16),
mgr_id INT,
);
INSERT INTO employees VALUES
(1,'George',5),
(2,'Monica',5),
(3,'Rachel',5),
(4,'Marie',5),
(5,'Emma',6),
(6,'David',NULL);
查询本身显示了按经理分组的直接下属的数量是这样的:
SELECT
m.emp_name,
COUNT(e.emp_name) AS number_of_subordinates
FROM
employees as e
JOIN employees as m
ON e.mgr_id=m.emp_id
GROUP BY m.emp_name
ORDER BY number_of_subordinates DESC
但是,这向我显示了每个经理的直接下属。我还想展示的是间接下属的数量。因此,举例来说,尽管艾玛仍然有4个下属,但大卫却拥有4个艾玛,外加5个艾玛(因为他是艾玛的老板,而艾玛是乔治,莫妮卡,雷切尔和玛丽的老板。
最佳答案
您正在寻找recursive self join。 MySQL不支持此功能,尽管它在许多其他DBMS(Oracle,Microsoft SQL Server,DB2,PostgreSQL等)中也是如此。
正如其注释中所述,This answer提供了一种解决此问题的方法,尽管它并不理想。 this question的答案讨论了在MySQL中表示分层数据的替代方法。
资料来源:here
关于mysql - SQL/自连接/下属数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26207056/