• ベストアンサー

引数によってwhere句を切り替える方法

kazu1213の回答

  • kazu1213
  • ベストアンサー率60% (3/5)
回答No.4

勘違いしていました。 or条件なので引数がNULLのカラムは条件を無効にしたいのですね。 また「引数が無い時はNULLデータを抽出したくない」というのは  A. 引数1と引数2の両方がNULLのケース の事でしょうか? A.の場合  1. 品番と商品名の両方がNULLのレコードは抽出しない という事なのでしょうか? それとも  2. 品番か商品名のどちらかがNULLのレコードは抽出しない という事なのでしょうか? それともA.のケースに関係なく  3. 引数がNULLのカラムはもう片方の条件で一致したレコードであっても    NULLであれば抽出しない という事なのでしょうか? 【1.の対応策】 where 品番 = 引数1 or 商品名 = 引数2     or    (引数1 is null and 引数2 is null     and (品番 is not null or 商品名 is not null)) 【2.の対応策】 where 品番 = 引数1 or 商品名 = 引数2     or    (引数1 is null and 引数2 is null     and 品番 is not null and 商品名 is not null) 【3.の対応策】 where (品番 = 引数1 or 商品名 = 引数2     or (引数1 is null and 引数2 is null))     and 品番 is not null and 商品名 is not null

saikano07
質問者

お礼

返信大変遅れて申し訳ありませんm(_ _)m 基本的に引数が無いものは検索条件からはずしたいのです。 空のものはis null判定で無いと取得できないのですか、 勘違いしていました。。 返信ありがとうございます。 解決できました。。

関連するQ&A

  • WHERE句の条件を区別する

    こんばんは 業務で以下の切り分けをしたいのですが、可能でしょうか。 SOAP通信を使っていて、パフォーマンス的な観点から、select文は使用したくないと思っています。 ■環境 ・PHP5 ・MySQL ・FreeBSD6 ■やりたいこと Update文で更新を行ったときに、データそのものがなくて更新できなかったのか、データは存在するがPK以外の条件がマッチしなくて更新できなかったのかで、エラーコードを分けたい 例えば、  update tableA set column1='aaa' where pk1=1 and pk2=2 and column2='bbb'; といったSQL文で、「pk1=1 and pk2=2」に合致するデータがないのか、データは存在するが「column2='bbb'」には合致しなくて更新されないのかの切り分けをしたいのです。 かなり、困ってしまっています。 SQL文でできない場合でも、何かしらの解決方法がありましたら、よろしくお願いいたします!!!

  • SELECT文のWHERE句についてご教授下さい。

    SELECT文のWHERE句についてご教授下さい。 ┏━┳━━━━┳━━━━┳━━━━┳━━━━┓ ┃No┃パターン_┃データA__┃データB__┃データC__┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃01┃001_________┃P1だけ___┃NULL_____┃共通________┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃02┃001_________┃P1のみ___┃NULL_____┃共通_______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃03┃002_________┃NULL_____┃P2だけ___┃NULL______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃04┃002_________┃NULL_____┃P2のみ___┃共通_______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃05┃002_________┃NULL_____┃P2のみ___┃NULL______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃06┃003_________┃HOGE11_┃NULL______┃共通_______┃ ┗━┻━━━━┻━━━━┻━━━━┻━━━━┛ 上記のようなテーブル構造のデータがあり、 それぞれのカラムに対して検索できるWebの画面があります。 以下の要件を満たすSELECT文はどのように作成すればよいでしょうか? パターン「001」の場合だけ、データA列を検索条件に加える。 パターン「002」の場合だけ、データB列を検索条件に加える。 全パターン共通して、データC列は検索条件に加える。 【具体例】  以下の検索条件が指定された場合は、No「01と04と06」がHITする。   パターン=「001、002、003」   データA=「P1だけ」   データB=「P2のみ」   データC=「共通」

  • SQL where区で(-1)を使用したい

    SQL文のwhere区で(-1)を使用したいのですがどなたかアドバイスお願いします。 SQLをプロシージャにして検索条件を引数で渡そうと考えています。 検索したくない引数には(-1)を入れて渡したいです。 select * from X where X.1 = 'QQQ' and (引数 = -1 or X.2 = 引数) といった感じで、引数で(-1)を渡した場合 (-1 = -1 or X.2 = -1) となりwhere区で使用しない様作成したいと思っています。 この方法ではDATETIME型に対してはエラーとなるため出来ません。 良い方法は無いでしょうか。 よろしくお願いします。

  • count関数の値をwhere句で使用する方法について

    宜しくお願い致します。 例えば、下記の様にデータを検索します。 select column1,count(column2) as column2_num from hoge_table group by column2_num すると、検索結果にはcolumn1のそのままの値と、column2の合計数が表示されると思います。 このcolumn2の合計数に対してwhere句で絞込みを行う方法はありませんか? asで定義した値をそのままwhere句で使用できないとの事なので、 select column1,count(column2) as column2_num from hoge_table where count(column2) = '1' group by column2_num とやってみたんですが、検索出来ませんでした。 ご存知の方、ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQLのWHERE句を条件によって追加したい

    SQLのWHERE句にパラメータで渡された値がnullでない場合は条件に 含めるようにしたいのですが、書き方が分かりません。 CASEを使って書いてもエラーになってしまいます。 SELECT 項目1 ,項目2 FROM テーブル WHERE 条件1 = パラメータ1 AND 条件2 = パラメータ2 -- パラメータ3がnullでない場合は下記条件を付けたい AND 条件3 = パラメータ3 使っているのはpostgresqlです。 よろしくお願いします。

  • Oracle SQLの、where句内の条件文について教えてください。

    Oracle SQLの、where句内の条件文について教えてください。 下記SQLの(1)と(2)の記述文を教えてください。 (1)例:owner = sys,admin ownerがsysまたは、adminを抽出 (2)例:column_name = '*aaa*' column_nameに「aaa」が含まれているデータ SELECT owner, table_name,column_name FROM all_tab_columns WHERE (1)(Ownerを複数指定)   and (2)(column_nameに、●●が含まれるデータ)

  • WHERE句で書いた順に表示するには

    WHEREに以下の順で検索した時に select * from tb where  ( id = 'i004' ) or ( id = 'i001' ) or ( id = 'i003' ) 書いた順に、 name id ---------- jun i004 kei i001 tom i003 と引き出したいのですが、 解決方法があれば、是非ご教授していただきたいです。

    • ベストアンサー
    • MySQL
  • sql文のwhere句について

    <環境>sqlserver SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には 条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか? 空白時パラメータは以下のとおり入ってきます。 @no="" …完全一致 @name="%%" …部分一致 例) SELECT * FROM テーブル WHERE (NO = @no) and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name)) NAMEは上記クエリにて取得できています。 NOのところはどのようにすればよいでしょうか?

  • PHP埋め込みのMySQLでwhere句が上手くいかない

    PHPのモジュールにMySQLのSELECT文を埋め込み、 where句でデータベースからデータを読込もう としています。 ところが、下記select文のand以下が無視され、 where句で指示した通りの結果が出ません。 文法的におかしいのでしょうか? どなたかアドバイスいただければ幸いです。 条件などは下記の通りです。 環境: OS Fedora Core5 MySQL 5.0.27 PHP 5.1.6 select文 "SELECT * FROM wrma_tbl where mise_id = $mise_code and (enddate is NULL) or (enddate > $maedate)" select文の説明: (1)DBの支店id(mise_id)と入力された支店code(mise_code)が一致すること…これは問題ない (2)作業終了日付(enddate)がNULLはピックアップする (3)作業終了日付(enddate)が今日(dateで抽出、yyyy-mm-dd)から30日前(maedate←正規の関数で計算済み)以前をオミット

  • is null のandについて(日付型)

    SQLのSELECTで困っています。 プロシージャに引数を渡してSELECTしようと考えています。 複数の日付(datetime)型の引数をand条件で結びたいです。 検索したくない場合はnullを渡す。 例) select A,B,C from XXX where A = '1' and (B = 引数 or 引数 is null) and (C = 引数 or 引数 is null) and (D = 引数 or 引数 is null) ===== B,C,D はdatetimeです。 この形ですと、B,C,D全ての引数に日付が入っていれば取得できる のですが一箇所でも引数に何もセットしないと値0件で帰ってきて しまいます。 せっかく(is null)を使用しているのに意味がありません。 良いお知恵は無いでしょうか。 よろしくお願いします。