2012-03-28 4 views
0

私のアプリケーションでは、テーブル位置で複数の結合を行うクエリがあります。ちょうどこのように:Postgres - 各エイリアスからデータを取得する

SELECT * 
FROM (...) as trips 
join trip as t on trips.trip_id = t.trip_id 

left outer join vehicle as v on v.vehicle_id = t.trip_vehicle_id 

left outer join position as start on trips.start_position_id = start.position_id and start.position_vehicle_id = v.vehicle_id 

left outer join position as "end" on trips.end_position_id = "end".position_id and "end".position_vehicle_id = v.vehicle_id 

left outer join position as last on trips.last_position_id = last.position_id and last.position_vehicle_id = v.vehicle_id; 

私のテーブルの位置は35列です(例:position_id)。

私がクエリを実行すると、結果はテーブルの位置が開始、終了、最後の3回表示されます。しかし、postgresは、例えば、start.position_id、end.position_id、last.position_idを区別することはできません。したがって、この3つの列はグループであり、1つのposition_idとして表示されます。

start.position_idとend.position_idのデータが異なるため、結果に表示されるposition_idという列は空です。

start.position_idをstart_position_idとして、すべての列の名前を変更する必要はありません。

各データグループを個別に取得するには、たとえば、 'start'テーブルからすべての列を取得します。 MYSQLでは、fetch_fieldsを呼び出してこの操作を行うことができ、 'start'のような別名を関数に与えます。

私はこれをPostgresで行うことはできますか?

よろしく、 ヌーノオリベイラ

+0

あなたのクエリルックス(少なくとも)不完全。しかし、とにかくそれを少しフォーマットします。 – wildplasser

+0

はい、その不完全な、私はちょうど問題があるimをparte置いた。その巨大なクエリ!ありがとうございます –

+0

あなたの質問を理解することは難しいです。 'SELECT ...'句に列名のリストを入力するのは面倒ですか? – wildplasser

答えて

1

私の理解では、あなたが(例えば、「position_id」など)の共有名を持つ各列が属するテーブル見分ける(またはそれが困難見つける。)が、できないことです一度に1組の共有列を表示するだけで済みます。その場合は、tablename.*をSELECTに使用してください。したがって、SELECT trips.*, start.*...は出張と開始の列を表示しますが、結合に関係する他の表の列は表示しません。

SELECT [...,] start.* [,...] FROM [...] atable AS start [...]

+0

それはそうではありません!私はそれをする方法を知っている。問題は異なります! 私はstart.position_id、end.position_idとlast.position_idを持っています。この3列はグループ化されていますが、そうではありません。私はエイリアスを与えられた関数があるかどうか、exemple startのために、関数がstart.position_id、start.position_timeなどの列からデータをフェッチするかどうかを知りたい –