我正在写一个应用程序,对车辆路径问题进行变更。该应用程序具有路线,停靠点和路线行驶方向。我需要为一个视图编写查询,该视图组合了路由的所有相关属性。因此,我需要将路由表连接到单个查询中的多对多关系。
查询详细
有路由表,该表route_stop_join和路由表的方向。路线和站点之间的关系实际上是多对多的,但我们只需要一个stop id列表,因此可以考虑与连接表的一对多关系。下面的查询计算总和n次,其中n是停止的次数:
select rj.id,
rj.stops,
sum(rd.time_elapsed) as total_time,
sum(rd.drive_distance) as total_distance
from routes_directions rd
right join (select r.id,
array_agg(j.stop_id) as stops
from routes r
left join routes_stops_join j
on r.id = j.route_id
group by r.id) rj
on rj.id = rd.route_id
group by rj.id, rj.stops;
,但我想看看是否有一个:
select r.id,
array_agg(j.stop_id) as stops,
sum(rd.time_elapsed) as total_time,
sum(rd.drive_distance) as total_distance
from routes_directions rd
right join routes r
on rd.route_id = r.id
left join routes_stops_join j
on r.id = j.route_id
group by r.id;
我可以在此使用子查询这样做在没有子选择的单个查询中执行此操作的方法。
左对齐SQL!?!你真的是这样写吗?还是它是一个复制和粘贴问题 - 并且你希望我们无论如何都要阅读它。 – jarlh
@McNets,但我在编辑之前编写了我的评论。现在看起来好多了! – jarlh
好吧,我在编辑后看到您的评论,这是一个时间旅行问题。 @jarlh – McNets