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