SQL /自加入/下属数量

时间:2014-10-05 20:47:37

标签: mysql sql

我有一张名为'员工'有一些数据,如员工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(因为他是艾玛的老板,而艾玛是乔治的老板,莫妮卡,雷切尔和玛丽。

1 个答案:

答案 0 :(得分:1)

您正在寻找recursive self join。这在MySQL中是不受支持的,尽管它存在于许多其他DBMS(Oracle,Microsoft SQL Server,DB2,PostgreSQL等)中。

This answer提供了解决此问题的方法,尽管它并不理想,如其评论中所述。 this question的答案讨论了在MySQL中表示分层数据的替代方法。

来源:here