こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLで複数の条件がある場合

データを抽出したいのですが、
・A条件
・B条件
・AB条件以外
・上記抽出条件から除外する条件
この様な場合、どうすればよいのでしょうか?
OR,AND条件の組み合わせでできない事は無いのですが
複雑になってしまいます。

投稿日時 - 2006-10-01 00:38:18

QNo.2442836

暇なときに回答ください

質問者が選んだベストアンサー

最近はPL/SQLとは、しばらくご無沙汰しているので、これがふさわしいかどうか判りませんが、こういった方法もあるということを書きます。
もしも、一つのSQLで記述するのが複雑になるのを避けるならば、抽出するためのフィールドを持ったワークテーブルを作成します。そして、抽出する前にtrancateして、最初の3つの条件を順番に一つずつのSQL文にし、ワークテーブルにinsertします。そして最後にワークテーブルから除外する条件のものをdeleteすれば、ワークテーブルには目的の条件のデータが入っているはずです。ただし、処理時間はSQL文を4つ発行するのと、テーブル操作ですから、orとandで組み合わせたものより遅くなるのは十分に予想されますね。でも最初の3つ程度は一つのSQL文でも複雑にはならないでしょう。
しかし、ふと思ったのですが、最初の3つの条件で全てのデータが抽出されるのではないでしょうか?(AB条件以外というのが今ひとつ内容がわからないのですが。[not (A条件 or B条件)]でも [not (A条件 and B条件]でも 。) 私の勘違いだったらゴメンなさい。

投稿日時 - 2006-10-01 01:43:03

お礼

回答ありがとうございます。
書き忘れましたが、一つのSQL文で行いたいのです。
ご指摘どおり、質問に間違いがありました。

・まずC条件は下記条件から除く
・A条件
・B条件
・AB条件でない

AB条件以外というのは もし条件に別名がつけられるのなら 
WHERE NOT (A条件 OR B条件)みたいなイメージです。

各条件ともたくさんのキーで外部結合しているので長くなってしまいます。。。

投稿日時 - 2006-10-01 01:56:44

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

非常に安易な考えですが、外部結合の記述で長くなるのなら、Viewにすれば短くなるのでは?Viewはsekect文の集まりなので遅くはなりますが。

投稿日時 - 2006-10-01 02:48:25

お礼

アドバイスありがとうございます。
業務の関係でviewはいじれないんですが、
MINUSを使えばいいことに気が付きました。

どうもありがとうございました

投稿日時 - 2006-10-03 00:16:15

ANo.1

個々のSELECT文をunionでつないでみては?

投稿日時 - 2006-10-01 01:16:45

お礼

回答ありがとうございます。
UNIONですか、
条件が複雑なのでUNIONつかうと単調で長すぎてしまうんですが、
仕方ないのですかね、、

投稿日時 - 2006-10-01 01:40:08

あなたにオススメの質問