簡體   English   中英

如何在SQL中獲取一組子項列表中的一組唯一父項

[英]How to get a set of unique parents given a list of children in SQL

我有一個包含heirarchical數據的表:

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。

這是一個例子。 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

SQL Fiddle的例子。

你為什么不試試:

HAVING(count(ParentID)) < 2

在您的查詢結束時。 適當地使用小組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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