web-dev-qa-db-ja.com

2つのテーブルから1つのビューへのデータ

(同じフィールドを持つ)2つのテーブルから1つのビューにデータを取得することは可能ですか?基本的に、ビューはデータを1つのテーブルであるかのように表示します。

16
Marcin

はい、UNIONを使用します-

CREATE VIEW vw_combined AS
   SELECT * FROM TABLE1
   UNION ALL
   SELECT * FROM TABLE2

...同じ数の列があり、データ型が各位置で一致している必要があります。

..できれば、JOINを使用します。

CREATE VIEW vw_combined AS
   SELECT * 
    FROM TABLE1 t1
    JOIN TABLE2 t2 ON t2.col = t1.col

しかし、私はビューに依存することに対して警告したいと思います-マテリアライズされない場合、それらは準備されたSQLステートメントのみです。パフォーマンス上の利点はなく、別のビューに基づいてビューを作成すると、パフォーマンスに悪影響を与える可能性があります。また、ビューは脆弱です-ビューは変更される可能性があり、問題がある場合はサポートビューを使用するまでわかりません。

27
OMG Ponies
create or replace view view_name as
select * from table_1
union all select * from table_2

注:ビューの列は、ビューの作成時に設定されます。ビューの作成後にtable_1とtable_2に列を追加すると、view_nameに表示されません。新しい列を表示するには、上記のDDLを再実行する必要があります。

重複する行を単一の行にまとめる(ただし、サーバーの作業が増える可能性がある)場合:

create or replace view view_name as
select * from table_1
union select * from table_2

一般に、選択リストで*を使用するのは不適切な形式ですが、ビューを使用するクエリが必要なものだけを選択すると想定して、すべての列に明示的に名前を付けるのではなく、ここで使用します。 (特に、table_1とtable_2が変更されたときに列名を追加する必要がないので。)

1