コンテキストPostgresクエリで複数の1対多のリレーションシップを管理する
私はビークルルーティング問題のバリエーションを実行するアプリケーションを作成しています。このアプリケーションにはルートのルート、停車駅、運転ルートがあります。私はルートのすべての関連する属性を組み合わせたビューのクエリを書く必要があります。したがって、単一のクエリで多数の多対多の関係にroutesテーブルを結合する必要があります。
クエリの詳細
ルートテーブル、route_stop_joinテーブルと経路方向テーブルがあります。ルートとストップの関係は本当に多くのものから多くのものですが、ストップIDのリストだけが必要なので、ジョイン・テーブルとの1対多の関係を考えてください。次のクエリでは、nは停止回数である合計nは時間をカウント:
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;
私はこのような副選択を使用してこれを行うことができます。
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;
が、私があるかどうかを確認したいと思いますsubselectsなしで単一のクエリでこれを行う方法。
左はSQLを正当化!?!あなたは本当にそのように書いていますか、それともコピー&ペーストの問題ですか - そして、とにかくそれを読むことを期待しています。 – jarlh
@McNets、あなたの編集の前に私のコメントを書いた。今はもっと良く見えます! – jarlh
私は編集後にあなたのコメントを見ました。それは時間旅行の問題です。 @jarlh – McNets