• ベストアンサー

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としては正しいのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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つ以上のテーブルを外部結合する場合は、結合の記述をカッコでくくって、別名をつける必要があるようです。

参考URL:
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/queries.html
Mizyu
質問者

お礼

なるほど。外部結合したテーブルを一つのテーブルとして認識させるのですね。 FROM句に書く副問い合わせのイメージですね。 やっとピンときました。ありがとうございます。 実際の業務も3つ以上のテーブルを使ったSQLでしたので、非常に助かりました。 また、何かあればよろしくお願いします。

その他の回答 (3)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.3

SQLについては参考URLが役に立つかと思います。 「OUTER JOIN」(外部結合)の説明は「第6回 テーブル結合のバリエーションを増やす」にあります。 http://www.atmarkit.co.jp/fnetwork/rensai/index/index-serial.html#sql

参考URL:
http://www.atmarkit.co.jp/fnetwork/rensai/index/index-serial.html#sql
Mizyu
質問者

お礼

わかりやすいサイトでした。ありがとうございます。

  • maro
  • ベストアンサー率47% (95/199)
回答No.2

Oracleは触ったことがないのでよくわからないのですが・・・。 PostgreSQLはPrynneさんがおっしゃるように7.1から外部結合に対応しています。 私はSQL文を考えるのが苦手なので、ODBCドライバを使って、MS Accessでテーブルをリンクし、クエリを作ってそのクエリをSQLに変換して使っています。 多少の文法の違いはありますが、MS Accessで作ったSQL文がPostgreSQLで動いてくれます。

noname#3345
noname#3345
回答No.1

PostgreSQLのバージョンはいくつでしょう? 7.0だったら、外部結合はサポートされていないので不可能ですが、7.1だったらOUTER JOINがサポートされているようです。 現在環境が無くて確認できないのですが・・・。 すいません。

参考URL:
http://osb.sra.co.jp/PostgreSQL/7.1/changes.html
Mizyu
質問者

補足

7.1です。リファレンスやサイトでJoinの使い方を見たのですが、イマイチわからないのです。具体例がみたいので、よろしくお願いします。

関連するQ&A

専門家に質問してみよう