查找最短路径的查询问题

时间:2014-02-25 03:34:57

标签: sql

Row No  Bus No  Kilometer     From     To
1           10    100        Salem     Trichy
2           11    150        Trichy    Madurai
3           12    180        madurai   Chennai
4           13    50         Salem     coimbatore
5           14    200       coimbatore  chennai
6           15   300        Salem      Chennai

这是我的表格(样本值)。我需要找到Salem和Chennai之间的最短路线,例如公里(分钟)

Route 1 : Salem->Trichy,Trichy->Madurai,Madurai->Chennai   Kilometer-430
Route 2:  Salem->coimbatore,coimbatore->chennai            kilometer -250
Route 3:  Selam->Chennai                                   kilometer -300

这里min是2号线 - 250公里。

请帮助构建查询。

2 个答案:

答案 0 :(得分:2)

你必须使用递归,不确定你正在使用什么数据库,但是如果是SQL Server:

;WITH cte AS (SELECT *
                    ,[From]+'>'+[To] AS Trip
                    ,Kilometer AS Trip_Distance
              FROM Table1
              WHERE [From] = 'Salem'
              UNION ALL
              SELECT a.*
                    ,Trip = b.Trip+'>'+a.[To]
                    ,Trip_Distance = b.Trip_Distance + a.Kilometer
              FROM Table1 a
              JOIN cte b
               ON a.[From] = b.[To]
              )
SELECT Trip, Trip_Distance
FROM cte
WHERE [To] = 'Chennai'
ORDER BY Trip_Distance

演示:SQL Fiddle

注意:如果您的FromTo不是VARCHAR(MAX),那么您必须处理使递归部分和锚点之间的长度匹配。

答案 1 :(得分:0)

这个简单的格式如下:

SELECT A.id,A.bus_no,B.from,B.to,B.via,B.km 
FROM a A INNER JOIN b B ON A.r_id=B.r_id
     ORDER BY a.id; 

 a b result

请注意:

  1. r_id是路由ID。
  2. id是行号