• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部結合のSQLの書き方について)

外部結合のSQLの書き方について

このQ&Aのポイント
  • マスタに存在して、データに存在しない項目コードがありますが、それも発生額07月はNULLでよいので、それ以外の項目をすべて表示したいです。
  • 必要なデータを取得するためには、外部結合を使用する必要があります。
  • 具体的には、マスタとデータのテーブルを外部結合して、マスタに存在して、データに存在しない項目コードも表示し、発生額07月がNULLである場合はその他の項目を表示します。

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

  • ベストアンサー
回答No.3

No.2です。 下記のような結果でもいいのであれば、こんな感じでいけると思います。 +-------------------------------------------------------+ | SEQ番号 | 本支所CD | 部門CD | 項目CD | 項目名 | 発生額07月 | +-------------------------------------------------------+ | 1 | 999 | 99 |05000 | 名称1 | 1,234 | 2 | 999 | 99 |05100 | 名称2 | 1,235 | 3 | NULL|NULL|05200 | 名称3 | NULL +--------------------------------------+ select マスタ.SEQ番号, data.本支所CD, data.部門CD, マスタ.項目CD, マスタ.項目名, data.発生額07月 from マスタ,( select * from データ where 本支所CD = '999' and 部門CD = '99' ) as data where マスタ.データCD = '0009' and マスタ.項目CD = data.項目CD(+) >どうしても出したいのであれば項目に固定値を入れるとかしないとダメかも……) 無理矢理提示された結果を出すのなら、本支所CD,部門CDの項目ではなく、'999','99'を代わりに指定したら同じ結果は出るかなと思って書きました。 絞り込みたいのであればダメですね。 気にしないでください(笑) #ちなみに8iはleft join使えないみたいです。

koko4741
質問者

お礼

ありがとうございます! 教えてもらったとおりにやって、 なんとか出来ました!! ちなみに、「as data」では 動かなかったので、下記のように修正しました。 select マスタ.SEQ番号, data.本支所CD, data.部門CD, マスタ.項目CD, マスタ.項目名, data.発生額07月 from マスタ,( select * from データ where 本支所CD = '999' and 部門CD = '99' ) data where マスタ.データCD = '0009' and マスタ.項目CD = data.項目CD(+) これでようやく先週から悩んでいた問題が解決しました。 やっと業務が進みます。 今回はお手数かけました。 どうもありがとうございました。

その他の回答 (2)

回答No.2

>マスタにある項目CDはすべて表示。そこにデータ項目を表示させる。マスタにある項目CDがデータにない場合は、表示できない部分以外はNULLで表示させるにはどうしたらよいのでしょうか? とのことですが、 +-------------------------------------------------------+ | SEQ番号 | 本支所CD | 部門CD | 項目CD | 項目名 | 発生額07月 | +-------------------------------------------------------+ | 1 | 999 | 99 |05000 | 名称1 | 1,234 | 2 | 999 | 99 |05100 | 名称2 | 1,235 | 3 | 999 | 99 |05200 | 名称3 | NULL +--------------------------------------+ この結果を望んでいるとなると若干違いませんか? 本支所CD・部門CDはデータテーブルから取得しているのでNULLになると思うのですが。 select SEQ番号, 本支所CD, 部門CD, マスタ.項目CD, マスタ.項目名, 発生額07月 from マスタ,データ where マスタ.データCD = '0009' and マスタ.項目CD = データ.項目CD(+) 上記で結合は可能です。 (本支所CD・部門CDで絞り込むとNULLのレコードが消えてしまうので条件から外しています。 どうしても出したいのであれば項目に固定値を入れるとかしないとダメかも……)

koko4741
質問者

補足

回答ありがとうございます! >この結果を望んでいるとなると若干違いませんか? >本支所CD・部門CDはデータテーブルから取得しているのでNULLになると思うのですが。 はい、確かにそうなんですが、件数が多い為どうしても絞って結果に出したいのです。 >どうしても出したいのであれば項目に固定値を入れるとかしないとダメかも……) 実際にどのように書いたらよろしいでしょうか? サンプルなど載せていただけますと助かるのですが・・・

  • tqp
  • ベストアンサー率0% (0/3)
回答No.1

(+)には制限があるようで、書き方によっては上手く動かないようです。 from マスタ left join データ on マスタ.項目CD = データ.項目CD where マスタ.データCD = '0009' and データ.本支所CD = '999' and データ.部門CD = '99' と書いてみてはいかがでしょうか?

koko4741
質問者

補足

ありがとうございます。 早速試したところ、 「SQLが正しく終了していません」と出ました。 Oracleに「join」は使用できるのでしょうか?

関連するQ&A