我有一張名爲'employees'的表,其中包含一些數據,如員工ID,員工姓名和經理ID。 我已自己加入,以顯示每位經理下的下屬人數。SQL/Self Join /下屬人數
它看起來像這樣和正常工作: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的艾瑪(因爲他是艾瑪的老闆,而艾瑪是喬治,莫妮卡,雷切爾和瑪麗的老闆)
請將您的問題發佈到您的問題本身。如果鏈接的SQLFiddle過時了,這個問題對於未來的訪問者就變得毫無價值(編輯:謝謝) – Bojangles 2014-10-05 20:51:04
您需要做一個遞歸或分層查詢。 MySQL基本上不支持這些查詢。要做你想做的事,你需要使用一個存儲過程(或者改變數據結構或者使用不同的數據庫引擎)。 – 2014-10-05 20:52:35
如果你只是想要一個設定的深度,說只有最多2級的子座標,你可以做每個深度的加入。但是,如果您希望它適用於所有樹,則需要遞歸查詢,而MySQL並不支持該查詢。 – wvdz 2014-10-05 20:55:12