CTE递归的一个应用

     今天在CSDN上看到一个帖子.帖子如下:

     有一张表
     站点1 站点2
     A B
     B C
     C D
     B E
     E D
    查询时提供A,D两点怎么出来路径?
    A-B-C-D
    A-B-E-D


    看到这上问题,第一印象就是这是一个递归调用,正好前些日子看 SQL server 2005技术内幕 中有关的CTE递归方法,就用来试了一下.

    代码如下:

    

CREATE TABLE #temp
(
   siteA varchar(5),
   siteB varchar(5)
)

INSERT  #temp
SELECT 'A','B' UNION ALL
SELECT 'B','C' UNION ALL
SELECT 'C','D' UNION ALL
SELECT 'B','E' UNION ALL
SELECT 'E','D' 

SELECT * FROM #temp;

WITH a AS
(
    	SELECT siteA,siteB,cast(siteA +'-'+siteB AS varchar(100))as paths,1 as num FROM #temp  
    	UNION ALL
    	SELECT t.siteA,t.siteB, cast(a.paths +'-'+t.siteB AS varchar(100))as paths,num+1 FROM a JOIN #temp AS t ON a.siteB=t.siteA
)

SELECT * FROM a

结果如下"

siteA   siteB    Paths         Num
A	    B	      A-B	        1
B	    C	      B-C	        1
C	    D	      C-D	        1
B	    E	      B-E	        1
E	    D	      E-D	        1
E	    D	    B-E-D	        2
C	    D	    B-C-D	        2
B	    C	    A-B-C	        2
B	    E	    A-B-E	        2
E	    D	   A-B-E-D	        3
C	    D	   A-B-C-D	        3

这里num是循环的层数


你可能感兴趣的:(JOIN,sql,c,server,table,insert)