- ベストアンサー
oracleからSQL Serverへの移行:副問い合わせでの外部結合方法
- oracleからSQL Serverへの移行において、副問い合わせでテーブル同士を外部結合するSQL構文を実現する方法について教えてください。
- 下記のoracle構文をSQL Server構文に書き換えたい場合、どのようにすれば良いでしょうか?
- select文の副問い合わせで定義したテーブル同士を外部結合するためのSQL構文の書き方をお教えください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>副問い合わせ同士のキーが複数になるどうしたらいいのでしょうか。 >すみません。よろしくお願いします。 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 ※未検証です
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
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になるのですがいいのでしょうか?
お礼
ありがとうございました。 勉強になりました。 指摘どおり例が悪かったですね。
- osamuy
- ベストアンサー率42% (1231/2878)
ぱっと見た感じ、外部結合演算子「(+)」をLeft Outer Join構文に書き換えればよいのでは。 http://www.google.co.jp/url?sa=t&source=web&cd=7&ved=0CFQQFjAG&url=http%3A%2F%2Ftechnet.microsoft.com%2Fja-jp%2Flibrary%2Fdd314438.aspx&ei=R_-ZTq6jEqOemQXJ-umLAg&usg=AFQjCNE-NVNrPFVdOPee230FZJZLQwgNhA
補足
早々に回答ありがとうございます 説明不足で申し訳ありません。 こちらの確認したい主旨は、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 副問い合わせ同士のキーが複数になるどうしたらいいのでしょうか。 すみません。よろしくお願いします。
お礼
なるほど、from句にカラムの結合を定義できるんですか。 知りませんでした。 ありがとうございました。 試してみます。