gpt4 book ai didi

Oracle 中的 SQL 路由查找器 - 递归?

转载 作者:行者123 更新时间:2023-12-01 13:58:02 25 4
gpt4 key购买 nike

我正在尝试构建一个简单的路由查找器,它计算并存储路由从 A -- B 到达的节点。我有两个表;一个由阶段(节点及其“下一个可能的跃点”)和一个 route_stage 表组成,该表应该能够存储使用唯一路由 ID 计算的每条路由。

阶段表

STAGEID START_STATION                  NEXT_HOP_STATION                   LENGTH
---------- ------------------------------ ------------------------------ ----------
1 Penzance Plymouth 78
2 Plymouth Exeter 44.8
3 Exeter Taunton 36.6
4 Exeter Salisbury 96.6
5 Salisbury Basingstoke 38.2
6 Basingstoke Southampton 52.7
7 Southampton Poole 37
8 Poole Weymouth 31.6
9 Taunton Reading 99.5
10 Reading Basingstoke 18
11 Reading Paddington 40.9
12 Taunton Bristol 48.8
13 Bristol Bath 13
14 Bath Swindon 37.5
15 Swindon Reading 39.8

Route_Stage 表

ROUTEID    STAGEID
---------- ----------
1 1
1 2
1 3
1 9
1 11
2 6
2 7
2 8
2 10
2 11

对于上述情况,ID 为 1 的路线从彭赞斯开始,经过普利茅斯、埃克塞特、汤顿、雷丁,最终到达帕丁顿。理想情况下,我想创建一个存储过程,它采用起点站和终点站的入口参数,以便内部代码能够计算出合适的路线。

我看过递归,但有点迷茫,因为我不确定当一个节点有多个潜在路径时代码应该如何 react ?它怎么知道哪一个是正确的下降。

非常感谢任何帮助。谢谢!

最佳答案

对于一个给定的起始位置,这将为离开该起始点的每条路线提供一行(我认为..抱歉,在 iPad 上手动输入)。

  SELECT
LEVEL as route_step,
t1.next_hop_station as next_station,
t1.stageid

FROM
stage t1

INNER JOIN stage t2
ON t2.start_station = t1.next_hop_station

START WITH
t1.start_station = 'your start station'

CONNECT BY
PRIOR t1.start_station = t1.next_hop_station

因此,对于彭赞斯站的起点:

Route_Step  Next_Station StageID
1. Plymouth. 1
2. Exeter. 2
3. Taunton. 3
4. Reading. 9
5. Basingstoke. 10
6. Southampton 6
7. Poole. 7
8. Weymouth 8
5. Paddington. 11
3. Salisbury 4
4. Basingstoke. 5
5. Southampton. 6
6. Poole. 7
7. Weymouth. 8

* excuse the .'s!

在您不同的起点站上加入一个连接(并删除显式的 START WITH 子句,以便您从所有站获得路线,而不仅仅是一个站)将为您提供输出表所需的内容(尽管根据以前的评论,我不确定这个结构对你有什么用,因为你失去了相关的细节):

SELECT
First_Stage.stageid as routeid,
q.stageid

FROM
(

SELECT
LEVEL as route_step,
t1.next_hop_station as next_station,
t1.stageid

FROM
stage t1

INNER JOIN stage t2
ON t2.start_station = t1.next_hop_station

CONNECT BY
PRIOR t1.start_station = t1.next_hop_station
) q

INNER JOIN stage as first_stage
ON first_stage.stageid = q.stageid
AND q.route_step = 1

关于Oracle 中的 SQL 路由查找器 - 递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com