2017-05-29 35 views
0

我有一个像这样的分层表,它是查询的结果。在分层表中查找每个组的顶层根组ID SQL

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 
------------------------- 

从结果中可以清楚地看出,他们是其他成员中最顶级的根,但他们的父母也不在列表中。那么我怎么能做到这一点?

回答

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) 
+0

它工作与否? –