2013-02-18 99 views
0

給孩子的名單獨特的父母我有一個包含一個表heirarchical數據:如何獲得一組SQL

ID Name  ParentID 
--- --------- --------- 
1 Alpha  2 
2 Beta  3 
3 Gamma  NULL 
4 Delta  2 
5 Epsilon 6 
6 Zeta  NULL 
7 Eta  1 
8 Theta  NULL 

鑑於ID的列表,我如何讓所有的唯一根列表父母ID?我不想要中間父母。

例如,假設我給出的ID列表是1, 2, 3, 4, 5。 我找的結果是:

ID 
--- 
3 
6 

顯然這需要某種形式的遞歸查詢。我認爲使用通用表格表達式(CTE)可能是可能的,但是我真的很費力地圍繞它如何完成。到目前爲止,我所看到的所有例子似乎都將所有的孩子和父母聚合在一起,以產生一個完整的習慣性列表,這不是我正在尋找的。有沒有任何SQL專家可以讓我在正確的方向推動?我意識到我可以迭代地對數據庫進行多重查詢,但我希望不必訴諸於此。

我應該注意到我正在使用SQL Server 2008.

+0

與此類似,http://stackoverflow.com/questions/14940489/find-contact-in-location-tree/14941396#14941396 – Kaf 2013-02-18 17:43:25

回答

2

下面是一個示例。 CTE從孩子向父母遞歸。

; with Cte as 
     (
     select ID 
     ,  ParentID 
     from Table1 
     where ID in (1, 2, 3, 4, 5) 
     union all 
     select parent.ID 
     ,  parent.ParentID 
     from Table1 parent 
     join Cte child 
     on  child.ParentID = parent.ID 
     ) 
select distinct ID 
from Cte 
where ParentID is null 

Example at SQL Fiddle.

+0

完美。這正是我所期待的。非常感謝快速響應。 – 2013-02-18 17:42:51

0

你爲什麼不嘗試:

HAVING(count(ParentID)) < 2 

在查詢結束。適當地使用組。