我有一张名为'员工'有一些数据,如员工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(因为他是艾玛的老板,而艾玛是乔治的老板,莫妮卡,雷切尔和玛丽。
答案 0 :(得分:1)
您正在寻找recursive self join。这在MySQL中是不受支持的,尽管它存在于许多其他DBMS(Oracle,Microsoft SQL Server,DB2,PostgreSQL等)中。
This answer提供了解决此问题的方法,尽管它并不理想,如其评论中所述。 this question的答案讨论了在MySQL中表示分层数据的替代方法。
来源:here