用一条SQL语句我不会:
1.直接到达地航线:
select 出发地,目的地
from tablename
where 出发地=city1 and 目的地=city2
2.通过一个中转地:
select a.出发地,a.目的地,b.目的地
from tablename a,tablename b
where a.出发地=city1 and b.目的地=city2 and a.目的地=b.出发地
3.通过两个中转地:
select a.出发地,a.目的地,b.目的地,c.目的地
from table a,table b,table c
where a.出发地=city1 and c.目的地=city2 and a.目的地=b.出发地 and
b.目的地=c.出发地 and b.目的地<>c.出发地(避免在双向直达地城市之间循环来往)
依次类推,最后可以用union将结果连起来
1.直接到达地航线:
select 出发地,目的地
from tablename
where 出发地=city1 and 目的地=city2
2.通过一个中转地:
select a.出发地,a.目的地,b.目的地
from tablename a,tablename b
where a.出发地=city1 and b.目的地=city2 and a.目的地=b.出发地
3.通过两个中转地:
select a.出发地,a.目的地,b.目的地,c.目的地
from table a,table b,table c
where a.出发地=city1 and c.目的地=city2 and a.目的地=b.出发地 and
b.目的地=c.出发地 and b.目的地<>c.出发地(避免在双向直达地城市之间循环来往)
依次类推,最后可以用union将结果连起来
(@current char(20), @dest char(20), @maxlevel int = 5) AS
SET NOCOUNT ON
DECLARE @level int
CREATE TABLE #Temp (city char(20), level int)
CREATE TABLE #list (city char(20), level int)
INSERT #Temp VALUES (@current, 1)
SELECT @level = 1WHILE @level > 0
BEGIN
IF EXISTS (SELECT * FROM #Temp WHERE level = @level)
BEGIN
SELECT @current = city
FROM #Temp
WHERE level = @level
DELETE FROM #Temp
WHERE level = @level
AND city = @current
DELETE FROM #list
WHERE level >= @level
IF EXISTS (SELECT * FROM #list WHERE city = @current)
CONTINUE
INSERT #list VALUES(@current, @level)
IF(@current = @dest)
BEGIN
SELECT city AS itinerary
FROM #list
CONTINUE
END INSERT #Temp
SELECT destination, @level + 1
FROM flights
WHERE departure = @current
AND @level < @maxlevel
IF @@rowcount > 0
SELECT @level = @level + 1
END
ELSE
SELECT @level = @level - 1
END