(同じフィールドを持つ)2つのテーブルから1つのビューにデータを取得することは可能ですか?基本的に、ビューはデータを1つのテーブルであるかのように表示します。
はい、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ステートメントのみです。パフォーマンス上の利点はなく、別のビューに基づいてビューを作成すると、パフォーマンスに悪影響を与える可能性があります。また、ビューは脆弱です-ビューは変更される可能性があり、問題がある場合はサポートビューを使用するまでわかりません。
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が変更されたときに列名を追加する必要がないので。)