同じ名前の列を持つテーブル間の結合としてのCREATE VIEW
タイトルが言うように、同じ名前の列(驚くべきことに "id
")を持つテーブル間の結合からビューを作成したいと思います。
Postgresは結果にテーブル名を付加しませんが、何らかの理由でクエリが正常に機能し、同じ名前と異なるデータを持つ複数の列を返します。
CREATE TABLE
は許容範囲が狭く、次を返します:
ERROR: column "id" specified more than once
他の人は別の名前で列をSELECT
ingすることを提案しています(例 here )が、両方のテーブルに多くの列があります。
id
列( this way など)を何らかの方法で自動的に名前変更/削除する必要がありますか、それとももっと良い方法がありますか?
あなたが参照した質問への私の回答にバグがありました。その間、私は他のいくつかの詳細を改善しました:
多くの列がある場合や繰り返し使用する場合は、その上で概説しているように動的SQLを使用します。
適切な命名規則を使用している場合、これらのケースのほとんどを回避できます。 id
を列名として使用しないでください。難しい方法を見つけているだけなので、あいまいすぎます。私は使うだろう tbl_id
代わりに、「tbl」はテーブル名です。
残念ながら、一部のORMはこのアンチパターンを使用しています。
また、PostgresはプレーンなSELECT
内の個別の列名を必要としないため、プレーンなSELECT
の例外は発生しません(ただし、この機能の有用性はアドホッククエリに限定されます)。ただし、サブクエリの派生テーブルであっても、テーブルまたはビューの列には異なる名前が必要です。 マニュアル:
テーブルと同じように、
SELECT
のすべての出力列には名前があります。 単純なSELECT
では、この名前は表示用に列にラベルを付けるために使用されますが、SELECT
がより大きなクエリのサブクエリでは、名前はより大きなクエリによって、サブクエリによって生成された仮想テーブルの列名として認識されます。
Postgresは個別のラベルを必要としません。ただし、あいまいさを避けるために、実際の列名は区別する必要があります。