- ベストアンサー
PostgreSQLでの外部結合
PostgreSQLでの開発をしております。 今まで、Oracle,SQLServerでしか開発経験がなく、外部結合のやりかたがピンときません。 Oracleでいう以下のSQLをPostgreで書く場合、どのように記載すればよいのでしょうか? SELECT m.no, c.value FROM main_table m, code_master c WHERE m.code = c.code(+) AND m.update_date > sysdate AND c.content_flg = "0"; main_tableのcodeがNullや、code_master.codeに対応する値がない場合でも、レコードを持ってくる。 ※Oracleなどは独自のやりかたを行っているので、Joinを使うやりかたのほうがSQLとしては正しいのですが・・・。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
↓こんな感じになると思います。 ------------------------------------------------- SELECT m.no, c.value FROM main_table m LEFT OUTER JOIN code_master c ON (m.code = c.code) WHERE m.update_date > 'now' AND c.content_flg = "0"; ------------------------------------------------- ON (m.code = c.code) のところは項目名が同じなので USING (code) でも良いです。 ちなみに3つ以上のテーブルを外部結合する場合は、結合の記述をカッコでくくって、別名をつける必要があるようです。
その他の回答 (3)
- MovingWalk
- ベストアンサー率43% (2233/5098)
SQLについては参考URLが役に立つかと思います。 「OUTER JOIN」(外部結合)の説明は「第6回 テーブル結合のバリエーションを増やす」にあります。 http://www.atmarkit.co.jp/fnetwork/rensai/index/index-serial.html#sql
お礼
わかりやすいサイトでした。ありがとうございます。
- maro
- ベストアンサー率47% (95/199)
Oracleは触ったことがないのでよくわからないのですが・・・。 PostgreSQLはPrynneさんがおっしゃるように7.1から外部結合に対応しています。 私はSQL文を考えるのが苦手なので、ODBCドライバを使って、MS Accessでテーブルをリンクし、クエリを作ってそのクエリをSQLに変換して使っています。 多少の文法の違いはありますが、MS Accessで作ったSQL文がPostgreSQLで動いてくれます。
PostgreSQLのバージョンはいくつでしょう? 7.0だったら、外部結合はサポートされていないので不可能ですが、7.1だったらOUTER JOINがサポートされているようです。 現在環境が無くて確認できないのですが・・・。 すいません。
補足
7.1です。リファレンスやサイトでJoinの使い方を見たのですが、イマイチわからないのです。具体例がみたいので、よろしくお願いします。
お礼
なるほど。外部結合したテーブルを一つのテーブルとして認識させるのですね。 FROM句に書く副問い合わせのイメージですね。 やっとピンときました。ありがとうございます。 実際の業務も3つ以上のテーブルを使ったSQLでしたので、非常に助かりました。 また、何かあればよろしくお願いします。