[pgsql-jp: 34012] Re: テーブルの結合について

SAKATA Testuo sakata.tetsuo @ lab.ntt.co.jp
2004年 9月 21日 (火) 09:15:46 JST


おはようございます。坂田@横須賀の丘の上です。

中嶋 wrote:

>はじめて問合せをしますナカシマです。
>初心者なので初心者なりの回答お願いします。
>
>環境は以下の構成で使用しています。
>RedHatLinux7.3
>Postgresql 7.2.3
>
>問題は
>以下のテーブル1、テーブル2が以下のようにあります。
>
>table1とtable2はほぼ同じ内容なのですが、
>
>2つのテーブルを共通する部分だけ単純にid,結合し、
>select分でidを1〜6まで
>以下のselect文を書いてもうまく結合できません。
>どのようにすればよいのでしょうか?
>  
>

お望みのものは、結合(join)ではなくて、マージではないかと思います。

>だめだった例)
>select   id, name, date, month
> from    table1,table2
>where    id='3'
>
>(table 1)
>id       name   year   date    month
>(text)  (text) (text) (text)  (text)
>1         A      2004  07        01
>2          B     2004  09        02
>3          C      2004  07        07
>
>(table 2)
>id       name   year   date    month   second  
>(text)  (text) (text) (text)  (text)   (text)
>4         D      2004  07          05        12
>5          A      2004  07          07        34
>6          B      2004  07          14        33
>
>(結合したい形)
>(table3)
>id       name   year   date    month
>(text)  (text) (text) (text)  (text)
>1         A      2004  07        01
>2          B     2004  09        02
>3          C      2004  07        07
>4         D      2004  07        05
>5          A      2004  07        07
>6          B      2004  07        14
>
>以上情報が不足している場合は直ぐに回答いたしますので宜しくお願い致します。
>
>  
>
この形の出力が得たいのであれば、

(1)マージしようとする双方のテーブルの型(列のセット)をそろえて、
(2)テーブルをマージする

ことになります。

(SELECT id, name, year, date, month
FROM table2
)
UNION
(SELECT id, name, year, date, month
FROM table3
);

でできるかと思います。
( )で括った箇所が上記の(1)、
キーワードUNIONが(2)に対応します。

idに重複がある場合、などはもう少し処理を追加する必要がありますが…。

ご参考になれば幸いです。

-- 
坂田 哲夫@NTT サイバースペース研究所
sakata.tetsuo _at_ lab.ntt.co.jp
SAKATA, Tetsuo. Yokosuka JAPAN.




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