• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:oracleからSQL Serverへの移行)

oracleからSQL Serverへの移行:副問い合わせでの外部結合方法

このQ&Aのポイント
  • oracleからSQL Serverへの移行において、副問い合わせでテーブル同士を外部結合するSQL構文を実現する方法について教えてください。
  • 下記のoracle構文をSQL Server構文に書き換えたい場合、どのようにすれば良いでしょうか?
  • select文の副問い合わせで定義したテーブル同士を外部結合するためのSQL構文の書き方をお教えください。

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.2

>副問い合わせ同士のキーが複数になるどうしたらいいのでしょうか。 >すみません。よろしくお願いします。 where と同様、join~on に対しても and で複数条件をつなげる事ができます。 select * from (select cal1,cal2,cal3 from tbl1,tbl2 where cal1>100) aaa right join (select cal1,cal2,cal3 from tbl1,tbl2 where cal1<=100) bbb on aaa.cal1 = bbb.cal1 and aaa.cal2 = bbb.cal2 and aaa.cal3 = bbb.cal3 where aaa.cal1 = tbl3.cal1 ※未検証です

shin_06240624
質問者

お礼

なるほど、from句にカラムの結合を定義できるんですか。 知りませんでした。 ありがとうございました。 試してみます。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

oracleの(+)は外部結合の右側、right joinの左側を意味します。 なので select * from (select cal1,cal2,cal3 from tbl1,tbl2 where cal1 >100) aaa left join (select cal1,cal2,cal3 from tbl1,tbl2 where cal1 <=100) bbb on aaa.cal1 = bbb.cal1 and aaa.cal2 = bbb.cal2 and aaa.cal3 = bbb.cal3 inner join tbl3 on aaa.cal1 = tbl3.cal1 かな。ただし、元データが同じで「cal1 >100」と「cal1 <=100」では「cal1」が100でないと「bbb」側はすべてNULLになるのですがいいのでしょうか?

shin_06240624
質問者

お礼

ありがとうございました。 勉強になりました。 指摘どおり例が悪かったですね。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1
shin_06240624
質問者

補足

早々に回答ありがとうございます 説明不足で申し訳ありません。 こちらの確認したい主旨は、Oracleでは外部結合の定義をWhere句で行うところ、SQL Serverは From句で定義するため、副問い合わせでは定義がうまくいきません。 外部結合キーが一つであれば下のようになりますが、 select * from (select cal1,cal2,cal3 from tbl1,tbl2 where cal1>100) aaa right join (select cal1,cal2,cal3 from tbl1,tbl2 where cal1<=100) bbb on aaa.cal1=bbb.cal1 where aaa.cal1 = tbl3.cal1 副問い合わせ同士のキーが複数になるどうしたらいいのでしょうか。 すみません。よろしくお願いします。

関連するQ&A