[pgsql-jp: 28814] Re: 複数テーブルを統合するようなテーブルについて

Tamotsu Ebina ebina @ pluto.dti.ne.jp
2003年 1月 28日 (火) 19:20:32 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でよいと思います。


> 高橋です。
>
> "検索のみ"でしたらVIEWを作成するのはどうでしょう?
> 
> INSERT INTO test1 (name) VALUES ('hoge');
> 
> CREATE VIEW test AS
>   SELECT date, name, add, tel
>   FROM test1
>  UNION
>   SELECT date, name, add, tel
>   FROM test2
>  UNION
>   SELECT date, name, add, tel
>   FROM test3;
> 
> SELECT * FROM test WHERE name='hoge';
> 
> で一応検索できました。
> --
> toshiya @ hh.iij4u.or.jp

 




pgsql-jp メーリングリストの案内