假定T-SQL和的MSSQLServer(沒有指定),並考慮到您的Group
表應該是這個樣子:
Id | Name | ParentId
---+------+---------
1 | A | NULL
2 | B | NULL
3 | C | NULL
4 | A1 | 1
5 | A2 | 1
6 | A3 | 1
7 | A11 | 4
8 | A12 | 4
9 | A13 | 4
您可以使用下面的遞歸CTE找到頂層的給定組,說「A12」:
WITH [Group](Id, Name, ParentId) AS
(
SELECT 1, 'A' , NULL UNION
SELECT 2, 'B' , NULL UNION
SELECT 3, 'C' , NULL UNION
SELECT 4, 'A1' , 1 UNION
SELECT 5, 'A2' , 1 UNION
SELECT 6, 'A3' , 1 UNION
SELECT 7, 'A11', 4 UNION
SELECT 8, 'A12', 4 UNION
SELECT 9, 'A13', 4
), q AS
(
SELECT
*
FROM
[Group]
WHERE
[Name] = 'A12' -- Given 'A12' as the child
UNION ALL
SELECT
g.*
FROM
[Group] g
JOIN
q
ON
q.ParentId = g.Id
)
SELECT
*
FROM
q
WHERE
ParentId IS NULL
該查詢將返回:
Id | Name | ParentId
---+------+---------
1 | A | NULL
我不需要加入。我想知道哪個組織是特定團隊的頂級團隊。 –
*** SQL ***只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......很多東西都是特定於供應商的 - 所以我們真的需要知道什麼**數據庫系統**(和哪個版本),你正在使用.... –
@SamarthAgarwal:你**做**需要加入。你需要遞歸地加入Group表到自己,攀登組的層次結構,直到'GroupUnder'爲'NULL'。當它是NULL時,你知道該行中的GroupID是頂級組。我鏈接到的職位就是這樣做的。這不是一個小問題要解決。該解決方案可能看起來令人畏懼,但實際上它非常優雅。 –