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

数据表的关系输出,求解一个算法
比如说现在有这样一个数据表(是电气连接方面的,所以以端口连接为逻辑关系):
起始部位 起始端子号 末端部位 末端端子号
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写查询语句时,可以根据末端部位和末端端子号作为搜索条件,但是在第二个分叉点出现的时候没办法搜下去把全部的结构都输出来,这里求解一个算法,小妹谢谢了!



------解决方案--------------------
从最末断递归查询找到根节点,再逆向输出。大体这个思路、
------解决方案--------------------
参照递归查询,未测试
SQL code
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