查找分层表SQL

时间:2017-05-29 14:28:17

标签: sql sql-server-2012

我有一个像这样的分层表,这是查询的结果。

ID   Parent    Name
1    35         Alex
2    50         John
3    1         Don
4    3         Anietta
5    2         Merin
6    1         Johan
7    4         Tom
8    25         Philp
9    8         Mathew
--------------------------------

这实际上是从表中过滤的行

那么如何使用CTE从上面的结果中选择顶部根节点

所以最后的结果是这样的

ID    Parent    Name
------------------------
1     35        Alex
2     50        John
8     25        Philip
-------------------------

从结果中可以清楚地看出,他们是其他成员的最高根,但他们的父母也不在列表中。那我怎么能实现呢?

1 个答案:

答案 0 :(得分:0)

您可以尝试此伪代码。

with data as (
   select 1 ID,  35 Parent,'Alex' as name

union select 2  ID,  50 Parent,          'John' as name
union select 3  ID,  1  Parent,       'Don' as name

union select 4  ID , 3  Parent,       'Anietta' as name
union select 5   ID, 2 Parent,        'Merin' as  name
union select 6   ID, 1 Parent,        'Johan' as name
union select 7   ID ,4  Parent,       'Tom'  as name
union select 8   ID ,25 Parent,       'Philp' as name
union select  9   ID ,8  Parent,       'Mathew' as name
) 
select * from data d1
where not exists (select 1 from data d2 where d2.id = d1.parent)