0

我有一个包含层次结构数据的表:

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。

4

2 回答 2

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

SQL Fiddle 的示例。

于 2013-02-18T17:39:23.737 回答
0

你为什么不试试:

HAVING(count(ParentID)) < 2

在您的查询结束时。适当地使用 group by。

于 2013-02-18T17:44:24.747 回答