
下記のように外部結合と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で質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
このQ&Aを見た人はこんなQ&Aも見ています
-
単一グループのグループ関数ではありません。
Oracle
-
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
PL/SQLカーソルの2重FORループができません
Oracle
-
-
4
ORA-01843: 指定した月が無効です。エラー
Oracle
-
5
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
6
固定値を含む結合と複数テーブルの結合について
Oracle
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
TO_CHARでのゼロ非表示について
Oracle
-
9
SI Object Browserのテーブルスクリプト出力のやり方
その他(データベース)
-
10
SQL*LoaderでCSVから指定した列のみインポートしたい。
Oracle
-
11
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
12
Oracleでの文字列連結サイズの上限
Oracle
-
13
DELETE文でFROM句を省略した場合
その他(データベース)
-
14
【PL/SQL】FROM区に変数を使う方法
Oracle
-
15
FROM の中で CASE を使えるでしょうか
SQL Server
-
16
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
17
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
18
group byの並び順を変えるだけで結果が異なる
Oracle
-
19
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
oracleの分割delete
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
複数テーブルのMAX値の行データ...
-
SQL GROUPで件数の一番多いレコ...
-
SET句内で複数の条件を指定して...
-
unionでマージした副問合せを結合
-
unionの結果は集計はできないで...
-
件数を取得する方法
-
固定値を含む結合と複数テーブ...
-
updateの一括実行
-
マテビューのNOTNULL設定について
-
SQLの書き方(チェックボックス)
-
oracleのsqlについて質問です。...
-
結合と副問い合わせの違い
-
再起SQL が無限ループします。
-
外部結合とor条件混在の記述方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
外部結合とor条件混在の記述方法
-
固定値を含む結合と複数テーブ...
-
oracleの分割delete
-
複数テーブルのMAX値の行データ...
-
unionでマージした副問合せを結合
-
SQL GROUPで件数の一番多いレコ...
-
SET句内で複数の条件を指定して...
-
他のテーブルを参照した値はupd...
-
unionの結果は集計はできないで...
-
COUNTの取得方法(?)について...
-
結合と副問い合わせの違い
-
マテビューのNOTNULL設定について
-
SQLの書き方(チェックボックス)
-
DELETE 文とEXISTSの使い方につ...
-
ある条件を持たないレコードの抽出
おすすめ情報