![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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ランキング
-
SQL Date型の列から年月だけを...
-
Accessの重複なしのカウントの...
-
SQLのエラー(~付近に不適切な...
-
ACCESS2007 フォーム 「バリア...
-
【VB.NET】日付型の列にNULLを...
-
Tverは無料でしょうか?
-
sqlserverで集計結果をUPDATEし...
-
SQLサーバー接続 特定のPCがWin...
-
<SQL>重複しているデータの場合...
-
SQL文 複数実行
-
SQLサーバで和暦から西暦に変換...
-
ストアドプロシージャのRETURN...
-
AccessのInsertクエリのあとつ...
-
【SQL Server 2014】バッチ(コ...
-
BULK INSERT時のNull許容について
-
chr(13) と char(13) の違いっ...
-
DTexec でSSISパッケージを実行...
-
SQL 不要な文字列を削除したい
-
Access2013で操作ログを残した...
-
Visuaal Studio Community 2022...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定条件でWHERE句の条件を変更...
-
oracleからSQL Serverへの移行
-
列をソートしたい
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
for whichの使い方
-
SQLで特定の項目の重複のみを排...
-
INSERT文でフィールドの1つだ...
-
過剰なオブジェクト指向脳から...
-
カーソル0件の時にエラーを発生...
-
datetime型でNULL値を入れたい。
-
SQL Date型の列から年月だけを...
-
速度が低下し無効になったアド...
-
副問合せの書き方について
-
1、Rstudioで回帰直線を求める...
-
重複していないレコードの抽出...
-
SQL文で、合計が0のレコードを...
おすすめ情報