我有一个名为“ 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/

10-09 17:40