我无法获得语句以获取航班上的所有中途停留。如何获取Flightroutes中的最短路径 - 表
我有一张桌子,里面有飞机,有一个源机场和一个目的地机场。 现在我想要从机场A到机场B的最短飞行路线(最不经常停留的地方),没有从A到B的直接路线,所以我必须连接几条路线。
因此,举例来说,如果我想去从18的1403例我想要得到的路线
(18 > 24 | 24 > 87 | 87 > 1403)
,而不是
(18 > 24 | 24 > 87 | 87 > 99| 99 > 1403)
下面是一些测试数据
src_apid | dst_apid
---------+----------
18 | 24
24 | 87
87 | 99
87 | 1403
99 | 18
99 | 1403
我的看起来像这样:
WITH rejkabrest (
src_apid,
dst_apid
) AS (
SELECT
src_apid,
dst_apid
FROM
routes
WHERE
src_apid = 18
UNION ALL
SELECT
a.src_apid,
a.dst_apid
FROM
routes a
INNER JOIN rejkabrest b ON a.src_apid = b.dst_apid
WHERE b.dst_apid = 1403
) SELECT
src_apid, dst_apid
FROM
rejkabrest;
但是,这种方式我只得到所有的路线开始在源机场18.如果我尝试另一种方式,我得到一个循环问题。
希望你们能帮助我。提前谢谢了!
https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm –
[This answer](http://stackoverflow.com/a/39119303/5089204)是SQL-Server语法,但可能会指出你的方式。主要的诀窍是,如果一个地方被重新访问,随着所有访问过的站点携带一个增长的字符串并停止递归。 – Shnugo