• ベストアンサー

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

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

noname#33353
noname#33353
  • Oracle
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • 複数条件でのカウント

    データの個数のカウントで行き詰りましたので質問させていただきました。 複数条件で検索するのですが、その条件の中に AND と OR があります。 現状ではCOUNTIFSを足していって算出していますが、場合により条件が多くて とんでもなく長い式になってしまっています。 なんとか簡潔に短い式にまとめられないかと思いまして試行錯誤したり調べたり してみたのですが答えが出ませんでしたので質問に至りました。 現状では以下の様になっております。 A列・・・2ケタの数字 B列・・・数字・文字列の混合 データは約1000行あります。  このデータから、A列の 10 or 15 のデータで、 かつB列の 4 or 1_100 のデータの個数を求める式です。 =COUNTIFS(A1:A1000,C1,B1:B1000,D1)+COUNTIFS(A1:A1000,C1,B1:B1000,D2) +COUNTIFS(A1:A1000,C2,B1:B1000,D1+COUNTIFS(A1:A1000,C2,B1:B1000,D2) 条件を変えていろいろカウントしたいので、 C1~C2にA列の検索条件を入力するセルとし、 D1~D2にB列の検索条件を入力するセルとしております。 上記の式は条件がそれぞれ2個ずつとなっておりますが、 片方だけで6個までいく事もあり、その場合式がかなり長くなります。 これをどうにかして簡潔に短くまとめたいと思っております。 ご存知の方がおられましたらご教授下さい。 よろしくお願いいたします。

  • エクセルで3つの条件で検索したい場合

    エクセルで3つの条件で検索したい場合、どうすればいいですか? オートフィルター オプション 抽出条件の指定 「  」を含む 「  」を含む で、3つ目の条件を入れる項目がありません。 例えばシートに 列 A B C D E F とあり、 「A」を含む 「B」を含む 「C」を含む という三つの条件で抽出したい場合、どのようにオートフィルター オプションを使えばいいのでしょうか? ▼マークのフィルターをクリックして 外したい項目のチェックボックスを外せば、A,B,Cを抽出できることはわかってますが 今回は例なだけで、実際はもっと複雑なデータなので、 「オートフィルター オプション」「抽出条件の指定」のやり方が知りたいです。

  • Access 複数フィールドにまたがる抽出条件

    Access2016で、クエリの抽出条件の設定に悩んでいます。解決策をご存知の方はご教示いただきますようお願い致します。 ★やりたいこと★ 【テーブル1】に以下のようなフィールドがあります。 [フィールドA] "製品a" "製品b" "製品c ..." のようなデータ群 [フィールドB] "00 "01" の2種類のデータ群 [フィールドC] "98" "99" の2種類のデータ群 フィールドBが "00" で、かつフィールドCが "98" に該当するデータのみを除外する抽出条件を設定したい。 ※フィールドBが "00" でフィールドCが "99" のようなデータは除外したくない SQLとかは使わず、初心者でも後から解読・編集できるような方法があればありがたいです。

  • 同じフィールドから複数条件のAND条件で抽出する方法

    お世話になります。 同じフィールドから複数条件のAND条件で抽出する方法 DBはAccessです。 フィールド1がA フィールド2がBという条件でしたら Select 抽出フィールド form テーブル where フィールド1=A and フィールド2=B で行っています。 フィールド1がAまたはBでしたら Select 抽出フィールド form テーブル where フィールド1=A or フィールド1=B で行っています。 それではフィールド1がAもBも満たす抽出はどのようにしたら良いのでしょうか。 例: 学生テーブル  フィールド 学生ID、氏名 履修科目テーブル  フィールド 学生ID、同一学生内連番、科目 というテーブル構成で英語、国語のどちらも履修している学生を抽出する場合などです。 2テーブルをリンクしたクエリを作ったのですが、 単にフィールド 学生ID、氏名、同一学生内連番、科目 なのでどちらも履修している学生を抽出できませんでした。 どのようにしたらよろしいのでしょうか。よろしくお願いいたします。

  • 複数のデータ抽出条件について

     |nen  |kaisha|cust |seihin|code |qty |ctg | ------------------------------------------------- 1 |2004 |A   |AC  |ITEMA |1  |100 |2 | 2 |2004 |A   |AC  |ITEMA |2  |100 |1 | 3 |2005 |A   |AC  |ITEMA |1  |200 |1 | 4 |2005 |A   |AC  |ITEMA |2  |300 |2 |○ 5 |2004 |B   |BC  |ITEMB |1  |100 |3 | 6 |2004 |B   |BC  |ITEMB |2  |100 |2 | 7 |2005 |B   |BC  |ITEMB |2  |200 |1 |○ 8 |2005 |B   |BC  |ITEMB |1  |200 |2 | 9 |2004 |C   |CC  |ITEMC |2  |200 |2 |○ 10 |2004 |C   |CC  |ITEMC |1  |100 |1 | KEY:nen,kaisha,cust,seihin,ctg DB:Oracle 上記テーブルから、「ctg」項目の値を抽出する時、 以下の条件で抽出したいと考えています。 条件:nendo=2004,2005 kaisha、cust、seihinが同一のデータがある場合、 ・nen=2004のqtyの値が大きいものを抽出する。 ↓1件に絞り込めない場合、 ・nen=2005のqtyの値が大きいものを抽出する。 ↓1件に絞り込めない場合、 ctgが小さいものを抽出する。 (上記表の○データを抽出したいと考えています) PL/SQLで上手くデータを抽出する方法はありますでしょうか? 何度も考えて見たのですが、上手くいきません でした・・・。ご教授頂けましたら嬉しいです。 宜しくお願い致します。

  • 複数の抽出条件

    ACCESSで顧客の情報を複数の条件で抽出したいと考えています。 チェックボックスで在職or退職 コンボボックスで会社名の指定 トグルボタンで(あ~わ) なのですが、この条件を満たすデータを実行ボタンをクリックした時に抽出したいのですが、こんな複雑な条件はマクロでは出来ないのでしょうか?

  • 場合によって条件を変えるSQL

    ORACLE環境下、SQLにて以下のような条件でデータを取得したいです。 AテーブルとBテーブルを結合して、Bテーブルから名称を取得する。 <Aテーブル> id (key) 番号1 番号2 A01  001  n0001 A02  null  n0002 <Bテーブル> code(key) 名前  番号1 番号2 c0001   太郎  001  n0001 c0002   次郎  002  n0002 (1)A.番号が入力されていれば A.番号1=B.番号1 AND A.番号2=B.番号2を条件にする (2)A.番号が入力されていなければ A.番号=B.番号を条件からはずす。 A.番号2=B.番号2 のみで検索する。 <欲しい結果> A01→太郎を取得 A02→次郎を取得 入力されていたら条件に加え、入力されていなかったら 条件から外す、というSQLを教えていただけないでしょうか。 よろしくお願いいたします。

  • 複数の条件がある場合のsqlの書き方

    下記の場合、どのようなsqlを書けばいいのでしょうか? 以下のようなテーブルがあるとします。 apple ← テーブル名 name1, name2, name3, hide←カラム 日本, おいしい, 赤りんご, 1←ここからデータ アメリカ, りんご, い, 0 りんご, まずい, 高い, 0 ------------------------------------ 【条件】 name1, name2, name3 のどれかが”りんご”が含まれている かつ hide が 0 どのようにすればいいのでしょうか? ためしに、 select * from apple where hide=0 and name1 lile %りんご% or name2 like %りんご% or name3 like %りんご% で試してみましたが、希望した結果が出ませんでした。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • PLSQLで条件によりSQLを動的に変えたい

    例えば、あらかじめテーブルなどを読み、その内容により、 SQLの文そのものを非常に変えたいとします。 SQLその1 select * from TABLEA where A = 1 SQLその2 select * from TABLEA where A = 1 and B = 2 and C = 3 and D = 4 上記は例ですが、内容などにより複雑な条件式を追加したい。 ベースのSQLは非常に長い為、 例えば 完全に切り分けるのでは無く、共通の部分は共通ソースとしたい。 また、プリプロセッサみたいに、条件式が追加された場合 あたかも、初めからそのSQLのみがあり、他の制御文などをSQL文自身には追加したくない。 動的SQLでは無い方法でそのような事が可能でしょうか? ----- イメージ ----- select * from TABLEA where A = 1 IF (条件がある時のみ) B = 2 and C = 3 and D = 4 END IF; ------------------- 実際には、SQL文の中にPLSQLの制御文をうまく追加できない。

  • 外部結合とor条件混在の記述方法

    下記のように外部結合と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テーブルを抽出したい ・実際は他にも抽出条件・参照テーブルはあります