[pgsql-jp: 28823] Re: 複数テーブルを統合するようなテーブルについて
Tatsuo Ishii
t-ishii @ sra.co.jp
2003年 1月 28日 (火) 22:22:21 JST
石井です.
> 海老名@インフォテックです
>
> UNIONで注意しなくてはいけないのは、
> 各テーブル内に同一行が存在しない事が条件です。
>
> create table test1 (id int, name varchar(100));
> create table test2 (id int, name varchar(100));
> create table test3 (id int, name varchar(100));
>
> insert into test1 values(1,'ebina');
> insert into test2 values(1,'ebina');
> insert into test3 values(1,'ebina');
> insert into test3 values(1,'ebina');
>
> で
>
> select * from test1
> union
> select * from test2
> union
> select * from test3;
>
> の結果は
>
> id | name
> ----+-------
> 1 | ebina
>
> となります。
>
> id | name
> ----+-------
> 1 | ebina
> 1 | ebina
> 1 | ebina
> 1 | ebina
>
> とはなりません。
>
> UNIONは集合演算ですから、同一の内容の行は
> 1つしか返ってきません。
>
> テーブル内の行の内容が総てユニークならUNIONでよいと思います。
ユニークでない場合は,UNION ALLを使えば良いのでは?
ところで,UNION + VIEW と全く違う解としては,テーブルの継承を使う手が
あります.これならインデックスも効きます.具体的な例は過去ログにたくさ
んあるので省略.
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内