表如下
ID start(出发地) end(目的地)
1 A B
2 B D
3 E F
4 D M
5 B K
6 G W
写一SQL语句,任意输入一出发地(如:B)查询出可以到达的所有目的地(包括间接达到),和中间地的个数
输出列如下:
出发地 目的地 中间地的个数
B D 1
B M 2
。。
ID start(出发地) end(目的地)
1 A B
2 B D
3 E F
4 D M
5 B K
6 G W
写一SQL语句,任意输入一出发地(如:B)查询出可以到达的所有目的地(包括间接达到),和中间地的个数
输出列如下:
出发地 目的地 中间地的个数
B D 1
B M 2
。。
-- Author: liangCK 小梁
-- Date : 2008-11-18 17:10:25
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (ID INT,start VARCHAR(1),[end] VARCHAR(1))
INSERT INTO @T
SELECT 1,'A','B' UNION ALL
SELECT 2,'B','D' UNION ALL
SELECT 3,'E','F' UNION ALL
SELECT 4,'D','M' UNION ALL
SELECT 5,'B','K' UNION ALL
SELECT 6,'G','W'--SQL查询如下:;WITH Liang AS
(
SELECT
start,
[end],
lvl=1
FROM @T
WHERE start='B'
UNION ALL
SELECT
A.start,
B.[end],
lvl+1
FROM Liang AS A
JOIN @T AS B
ON A.[end]=B.start
)
SELECT *
FROM Liang/*
start end lvl
----- ---- -----------
B D 1
B K 1
B M 2(3 行受影响)
*/