我的表格有三个字段:Origin
,Destination
和Distance
。
如何编写查询以查找从始发地到目的地的最短路径?
Origin Destination Distance ----------------------------------------- A B 10 B C 20 C E 30 B F 5 F E 6
例如,我们想要从C到F的最短路线,答案是:
C---->F C---->B then B---->F
答案 0 :(得分:0)
根据已经发表的评论,我建议你看看这个: Graph Algorithms with MapReduce和MapReduce Links
答案 1 :(得分:0)
我必须解决类似的问题。只允许一跳。它有效,但解决方案非常繁琐。我不敢想你需要为你的问题编写什么程序。 SQL并不是真正针对您的问题。
从数据库读取数据并决定其他环境中的最佳路径(如LISP或Haskel)会更好。
所以我同意上述答案/评论,对你的问题没有简单的答案。
答案 2 :(得分:0)
我想可以使用递归CTE来完成。您可以找到以下代码以供参考。让我知道我是否想念任何东西。
DECLARE @x CHAR(5)= 'C';
DECLARE @y CHAR(5)= 'F';
WITH cte
AS (
SELECT CASE
WHEN origin = @x
THEN destination
ELSE origin
END destination,
distance,
CAST(RTRIM(CASE
WHEN origin = @x
THEN origin
ELSE destination
END) AS VARCHAR) AS rt
FROM troute
WHERE(origin = @x
OR destination = @x)
UNION ALL
SELECT a.destination,
a.distance + b.distance distance,
CAST(RTRIM(b.rt)+'-'+a.origin AS VARCHAR) rt
FROM troute a
JOIN cte b ON a.origin = b.destination)
SELECT id,
destination,
distance,
RTRIM(rt)+'-'+RTRIM(@y)
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY distance) ID,
*
FROM cte
WHERE destination = @y
) a
WHERE a.ID = 1;