[英]SELECT grand parent of a row with in a single table - SQL
我有一張包含以下假設數據的表:
ID | Name | managerId
---|---------|-----------
1 | James | 2
2 | Martin | 4
3 | Huges | 5
4 | Richard | NULL
5 | Kavin | 4
6 | Rita | 3
在上表中,我們有:
理查德是馬丁的經理,是詹姆斯的經理。
理查德是經理卡文是休斯的經理,麗塔是經理。
現在,我必須在此表中選擇員工的直屬經理和大經理。 我的意思是,如果我們從Rita
開始,我必須選擇Huges
(直屬經理)和Richard
(大經理)。
怎么做。 我一點都不知道。
編輯 :
沒有特定級別的經理。 對於層級為n的經理,雇員可以具有“ n”個數字{0,1,2,3 .....}
由於您只需要兩個級別,因此通過兩次自我連接來做到這一點是非常可行的。 另外,您可能想要left join
:
select t.*, tm.name as managername, tmm.name as manager_managername
from t left join
tm
on t.managerId = tm.id left join
tmm
on tm.managerId = tmm.id;
您可以在where t.name = 'Rita'
添加where t.name = 'Rita'
。
如果您必須執行任何級別的操作,則絕對應該查看此問題 。 簡短的答案是,您可能需要另一個數據結構來處理MySQL中的這種類型的查詢。
編輯:
以下答案僅適用於特定級別的父母(因為問題是在變更之前提出的)。 我確信對於N級,它需要一種完全不同的方法。
您可以使用它。 它上升到三個級別的經理,並找到擁有至少兩個級別的經理的所有員工。
SELECT aa.Name AS employee, bb.Name AS parent_manager, cc.Name AS grandparent_manager, dd.Name AS grand_grandparent_manager
FROM t1 AS aa
INNER JOIN t1 AS bb
ON aa.managerId = bb.ID
INNER JOIN t1 AS cc
ON bb.managerId = cc.ID
LEFT JOIN t1 AS dd
ON cc.managerId = dd.ID
這是您是否要為特定雇員提供經理。
SELECT aa.Name AS employee, bb.Name AS parent_manager, cc.Name AS grandparent_manager, dd.Name AS grand_grandparent_manager
FROM t1 AS aa
INNER JOIN t1 AS bb
ON aa.managerId = bb.ID
INNER JOIN t1 AS cc
ON bb.managerId = cc.ID
LEFT JOIN t1 AS dd
ON cc.managerId = dd.ID
WHERE aa.Name = 'Rita'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.