我有一个像这样的分层表,这是查询的结果。
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 :(得分: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)