[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 メーリングリストの案内