![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
oracleからSQL Serverへ移行することになったのですが、副問い合わせで定義したテーブル同士を外部結合するSQL構文が、うまく実現できず、ご教授して頂きたくよろしくお願いします。
下記、oracle 構文をSQL Server構文へ書き換えたい。
select *
from
(select cal1,cal2,cal3 from tbl1,tbl2 where cal1 >100) aaa,
(select cal1,cal2,cal3 from tbl1,tbl2 where cal1 <=100) bbb,
tbl3
where
aaa.cal1 = bbb.cal1(+) and
aaa.cal2 = bbb.cal2(+) and
aaa.cal3 = bbb.cal3(+) and
aaa.cal1 = tbl3.cal1
よろしくお願いします。
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
※未検証です
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になるのですがいいのでしょうか?
No.1
- 回答日時:
ぱっと見た感じ、外部結合演算子「(+)」をLeft Outer Join構文に書き換えればよいのでは。
http://www.google.co.jp/url?sa=t&source=web&cd=7 …
この回答への補足
早々に回答ありがとうございます
説明不足で申し訳ありません。
こちらの確認したい主旨は、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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- サーバー Windows Server 2019 CALについて 3 2022/04/02 16:40
- サーバー Windows2019CALとRDS CALについて 1 2022/06/19 13:48
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- 物理学 問題の問2について質問なのですが、 明線条件、経路差Δ=2(L2-L1)=mλより 2(L2-L1) 5 2023/01/10 19:03
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
field3で特定の値が入っている...
-
1、Rstudioで回帰直線を求める...
-
JavaScriptの定数名が取り消し...
-
フィルターかけた後、重複を除...
-
広告ブロッカーのアドカードと...
-
for whichの使い方
-
エクセルVBAでEdate関数は使え...
-
誰か教えてください
-
マイクラPC版のコマンドで効率...
-
pythonで同じコード内で複数の...
-
外部参照してるキーを主キーに...
-
差し込み後、元データを変更し...
-
マクロ 連続印刷
-
副問合せの書き方について
-
英語ができる方、問題をお願い...
-
This video is no longer avail...
-
SQLによる"あいうえお"順でソー...
-
SQLについての質問
-
変数名「cur」について
-
c言語 入力した二つの数字の足...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定条件でWHERE句の条件を変更...
-
oracleからSQL Serverへの移行
-
SELECT(結合)について
-
field3で特定の値が入っている...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
1、Rstudioで回帰直線を求める...
-
for whichの使い方
-
カーソル0件の時にエラーを発生...
-
SQLで特定の項目の重複のみを排...
-
EXISTSを使ったDELETE文
-
datetime型でNULL値を入れたい。
-
SQLServerで文字列の末尾からあ...
-
1日に1人がこなせるプログラム...
-
INSERT文でフィールドの1つだ...
-
列のヘッダーを含めるのをデフ...
-
SQL Date型の列から年月だけを...
おすすめ情報