日期:2014-05-17  浏览次数:20491 次

数据表的关系输出,求解一个算法
比如说现在有这样一个数据表(是电气连接方面的,所以以端口连接为逻辑关系):
起始部位           起始端子号             末端部位        末端端子号
CF04C2LD3_1           B7                  TB04SEC2L            116
TB04SEC2L             116                  HTSCB                 1
TB04SEC2L             116                  HTS                   3
HTSCB                 1                   TB04SEC2L             18
HTS                   3                    HTR1                  NC
HTS                   3                    HTI                   X1
我想要得到这样一个输出,CF04C2LD3_1-->B7--> TB04SEC2L --> 116--> HTSCB--> 1--> TB04SEC2L -->18
                        CF04C2LD3_1-->B7-->TB04SEC2L --> 116-->HTS -->3 --> HTR1 -->NC
                        CF04C2LD3_1-->B7-->TB04SEC2L --> 116-->HTS -->3 --> HTI --> X1
跟遍历树有点形似,但不同的是遍历树是在树的结构已知情况下,这个表中的结构不定,每个末端都可能出现分叉点,本人用SQL写查询语句时,可以根据末端部位和末端端子号作为搜索条件,但是在第二个分叉点出现的时候没办法搜下去把全部的结构都输出来,这里求解一个算法,小妹谢谢了!


------解决方案--------------------
从最末断递归查询找到根节点,再逆向输出。大体这个思路、
------解决方案--------------------
参照递归查询,未测试
with cte as
(
  select cast(起始部位+'-->'+起始端子号+'-->'+末端部位+'-->'+末端端子号 as varchar(1000)) col 
          from tb where 起始端子号='B7'
  union all
  select cast(b.col+'-->'+末端部位+'-->'+末端端子号 as varchar(1000)) col 
         from tb a join cte b on a.起始端子号=b.末端端子号 
)
select * from cte