• ベストアンサー

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

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

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

  • ベストアンサー
  • tenshiki
  • ベストアンサー率22% (48/211)
回答No.2

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

noname#33353
質問者

お礼

回答ありがとうございます。 書き忘れましたが、一つのSQL文で行いたいのです。 ご指摘どおり、質問に間違いがありました。 ・まずC条件は下記条件から除く ・A条件 ・B条件 ・AB条件でない AB条件以外というのは もし条件に別名がつけられるのなら  WHERE NOT (A条件 OR B条件)みたいなイメージです。 各条件ともたくさんのキーで外部結合しているので長くなってしまいます。。。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tenshiki
  • ベストアンサー率22% (48/211)
回答No.3

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

noname#33353
質問者

お礼

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

すると、全ての回答が全文表示されます。
回答No.1

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

noname#33353
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A