我有一个包含层次数据的表格:
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 :(得分: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
答案 1 :(得分:0)
为什么不尝试:
HAVING(count(ParentID)) < 2
在您的查询结束时。适当地使用小组。