如何在不使用CTE或循环的情况下获取分层数据?

时间:2015-08-06 09:42:21

标签: sql-server tsql

我有以下格式的数据。我想以分层方式检索这些数据而不使用CTE或循环,只需编写T-SQL语句即可。我怎么能这样做?

ParentId    ChildId
1           2
1           3
1           4
2           5
2           6
3           7
5           8
8           9

1 个答案:

答案 0 :(得分:0)

如果你真的不能使用CTE,你需要多次加入表格,比如@DavidG评论,如下所示:

select * 
from Table1 T1
left outer join Table1 T2 on T1.ChildId = T2.ParentId
left outer join Table1 T3 on T2.ChildId = T3.ParentId
left outer join Table1 T4 on T3.ChildId = T4.ParentId
left outer join Table1 T5 on T4.ChildId = T5.ParentId
where
not exists (select 1 from Table1 t where t.ChildId = T1.ParentId)

将返回以下内容:

ParentId     ChildId     ParentId     ChildId     ParentId     ChildId     ParentId     ChildId     ParentId     ChildId
1            2           2            5           5            8           8            9           NULL         NULL
1            2           2            6           NULL         NULL        NULL         NULL        NULL         NULL
1            3           3            7           NULL         NULL        NULL         NULL        NULL         NULL
1            4           NULL         NULL        NULL         NULL        NULL         NULL        NULL         NULL