簡體   English   中英

SELECT在單個表中具有一行的祖父級-SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM