这是帖子原文
感觉超难SQL问题 单表查询连接起点末点
表:
起点 末点
1 2
2 3
3 4
4 5
a b
等等
想要查询出来的结构:
(1)起末点连接:
起点 末点 起点 末点 起点 末点 起点 末点
1 2 2 3 3 4 4 5
(2)除去以上连接的点以外还有独立的点:
起点 末点
a b
可以用多条SQL查询,只要查询出来的结果拼凑起来没有重复即可,
很显然,常规手段处理有难度,仔细分析问题 ,其实只是一棵二叉树,基于二叉树的处理方式,很容易实现,具体如下:
--设置测试数据
create table #abc(s varchar(10),e varchar(10),Path varchar(100))
go
insert into #abc(s,e)
select 1,2 union
select 2,3 union
select 3,4 union
select 4,5 union
select 'a','b'
update #abc set [Path]=null
--设置根节点
update #abc
set Path=s+','+e+'->'
where s not in(select e from #abc)
while @@rowcount>0
begin
--循环处理儿子节点
update #abc
set Path=t2.Path+t1.s+','+t1.e+'->'
from #abc t1
join(select * from #abc) t2 on t1.s=t2.e
where t1.Path is null
end
--选择唯一路径
select path from #abc where e not in(select s from #abc)
--路径结果如下
path
----------------------------------------------------------------------------------------------------
1,2->2,3->3,4->4,5->
a,b->
完美解决用户要求