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

SAKATA Testuo sakata.tetsuo @ lab.ntt.co.jp
2004年 9月 21日 (火) 11:48:26 JST


こんにちは。坂田@実はSQLはまったく自信がない…です。


中嶋 wrote:

>坂田@横須賀の丘の上 様
>
>回答有難うございます。
>希望どおりの表を作成することが出来ました。
>
>しかし作成した表からデータを取り出す(where句
>を使う)場合はどこに記述すればよいのでしょうか?
>
>以上
>  
>

この種の問合せの書き方は、2通りあります。

(方法1)
マージ対象となるテーブルをUNIONする前に、
個々の表についてWHEREで絞り込む

記述例1

(SELECT id, name, year, date, month
FROM table2
WHERE <何かの条件>
)
UNION
(SELECT id, name, year, date, month
FROM table3
WHERE <何かの条件>
);


(方法2)
マージ対象となるテーブルをUNIONした後で、
WHEREで絞り込む

記述例2

SELECT *
FROM (SELECT id, name, year, date, month
FROM table2)
UNION
(SELECT id, name, year, date, month
FROM table3)
WHERE <何かの条件> );

この程度の複雑さのSQL文を書くことはあまりないので、
間違っているかもしれません…が、考え方は上記のとおりです。

★ご注意
UNIONを使って表をマージする際には、重複する行の扱いが
問題となります。重複した全ての行が必要であれば、
"UNION ALL"を、重複させたくないならば"UNION"を指定します(*)。

これらの話題は、PostgreSQL固有のものというよりは、
SQL一般のモノですから、世間で多数出回っているSQLの教科書・
参考書を一つ備えておくと良いと思います。

#お勧めの教科書とかは、この分野に疎いので分かりません。
#どなたか、詳しい方のフォローをお待ちしています。
#ぼく自身は、非効率ですが、JISの規格票を見ています。

では。

>----- Original Message ----- 
>From: "SAKATA Testuo" <sakata.tetsuo @ lab.ntt.co.jp>
>To: <pgsql-jp @ ml.postgresql.jp>
>Sent: Tuesday, September 21, 2004 9:15 AM
>Subject: [pgsql-jp: 34012] Re: テーブルの結合について
>
>
>  
>
>>この形の出力が得たいのであれば、
>>
>>(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.
>>
>>
>>
>>    
>>
>
>
>
>  
>


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




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