
下記のように外部結合とOR条件を同時に使用するとエラーになってしまいます。
FROM句で記述する必要があると思いますが、
下記と同様の仕様を実現するにはどう書けばよいでしょうか?
アドバイスお願いします。
SELECT
A.*
FROM
A,
B
WHERE
((A.AAA = 0 AND A.BBB = B.BBB(+)) OR
(A.AAA = 1 AND B.BBB(+) = 0))
●実現したいこと
A.AAAが0の場合:A.BBB= B.BBBのデータ または
A.AAAが1の場合:B.BBB=0のデータを抽出したい
●前提
・Bテーブルに存在しなくともAテーブルを抽出したい
・実際は他にも抽出条件・参照テーブルはあります
No.4
- 回答日時:
#3です。
karen237さんの提示した条件に以下の表現があります。
A.AAA = 1 AND B.BBB(+) = 0
ここから、以下のように推測しました。
1.A.AAA=1の場合に結合されるB表のレコードはB.BBB=0。
2.A表とB表の結合条件は 項目BBBの前提ですので、B.BBB=0はすなわちA.BBB=0
ただし、データとしてA表のAAA=0のレコードについてはBBBがB表との結合値として有効であるが、
AAA=1のレコードのBBBはB表と関連がない値であるならば私の提示した回答では解決しません。
(文章ではややこしいですが、下記の状態で、A表のレコード(1)(2)ともB表の(1)と結合するということ)
A表
AAA BBB
(1) 1 0
(2) 1 9
B表
BBB CCC
(1) 0 データ0
それであれば素直にA.AAA=0の場合と1の場合とでSELECT文を分けて、UNIONすべきかもしれません。
とすると、以下のようにできますか?ただし、これだとB表に必ずBBB=0のレコードがある必要があります。
(B.BBB (+) = 0としてもだめだと思います)
SELECT A.… FROM A,B WHERE A.AAA = 0 AND A.BBB=B.BBB(+)
UNION ALL
SELECT A.… FROM A,B WHERE A.AAA = 1 AND B.BBB = 0
質問文には「Bテーブルに存在しなくともAテーブルを抽出したい」とあり、BBB=0のレコードがなくても
A表のレコードをSELECTするならばさらに複雑にしなくてはなりませんね。
再度アドバイスありがとうございます。
なるほど。解釈の方法は理解できました。
今回の仕様では
AAA=1のレコードのBBBはB表と関連がない値です。おまけにおっっしゃる通り、BBB=0のレコードがなくてもA表のレコードをSELECTしたいです。
今回は#1さんご提示の方法でいきたいと思います。
色々と勉強になりました。本当にありがとうございましたm(_)m
No.3
- 回答日時:
テーブルの情報がないのと、条件を抜き出しているので想像まかせの
怪しげな回答になりますが…
※ちなみにエラー内容は「ORA-01719: ORまたはINオペランドの中で
外部結合演算子(+)は使用できません」ですよね?
原則として、A表とB表の結合条件は項目BBBのように見えますがいかが
でしょうか。それを前提とすると、以下のように記述できそうです。
(2行目は実質的にB.BBB(+) = 0になりますよね。)
( ( A.AAA = 0 AND A.BBB = B.BBB(+)) OR
( A.AAA = 1 AND A.BBB = 0 AND A.BBB = B.BBB(+)) )
他にも条件があるようですが、この部分のみで考えると以下のように
整理可能で、そもそも外部結合(+)をORに入れる必要がないと分かります。
A.BBB = B.BBB(+) AND
( A.AAA = 0 OR (A.AAA = 1 AND A.BBB = 0) )
アドバイスありがとうございます。
・エラー内容はご提示の内容です。
・A表とB表の結合条件は項目BBB→その通りです。
最後の行の「A.AAA = 1 AND A.BBB = 0」がどうしても理解できずにいます。A.BBB = 0である必要はない気がするのですが・・。
理解不足で申し訳ないですm(_)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
集計後の数値が倍になる
-
select insertで複数テーブルか...
-
外部結合とor条件混在の記述方法
-
SET句内で複数の条件を指定して...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
Oracleでの文字列連結サイズの上限
-
実績累計の求め方と意味を教え...
-
SELECTで1件のみ取得するには?
-
OracleのSQL*PLUSで、デー...
-
エラー2「無効な識別子です」
-
ADO VBA 実行時エラー3021
-
ヘッダレコードとトレーラレコ...
-
Oracle8iでSQL文の引数について
-
Excelでセルの書式設定を使用し...
-
ワードの差込印刷で教えて下さ...
-
データセットのレコード更新が...
-
レコードが存在しなかった場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
外部結合とor条件混在の記述方法
-
MERGE文を単体テーブルに対して...
-
SQL GROUPで件数の一番多いレコ...
-
SELECTの結果で同一行を複数回...
-
oracleの分割delete
-
集計後の数値が倍になる
-
固定値を含む結合と複数テーブ...
-
SET句内で複数の条件を指定して...
-
unionでマージした副問合せを結合
-
COUNTの取得方法(?)について...
-
Access 2つのテーブルで数量...
-
他のテーブルを参照した値はupd...
-
SQLの書き方(チェックボックス)
-
SQLで複数の条件がある場合
-
複数テーブルのMAX値の行データ...
-
半角英数字混在データから数字...
-
結合と副問い合わせの違い
おすすめ情報