曖昧検索LikeのOR条件

このQ&Aのポイント
  • アクセスでSQLを作成しています。
  • プロンプトで3つ項目を入力して一致するのを検索する場合は、select * from TABLE where 項目名 in ([項目1],[項目2],[項目3]) とすることで検索できます。
  • ただ、検索を曖昧検索にする場合、select * from TABLE where 項目名 like ("*" & [項目名1] & "*") or 項目名 like ("*" & [項目名2] & "*") or 項目名 like ("*" & [項目名3] & "*") とすると、未入力時に全てを検索対象にしてしまいます。未入力時に条件を無効にする方法はありますか?
回答を見る
  • ベストアンサー

曖昧検索LikeのOR条件

アクセスでSQLを作成してます。 プロンプトで3つ項目を入力(未入力時はその分を考慮しない) して一致するのを検索する場合 --------------------------- select * from TABLE where 項目名 in ([項目1],[項目2],[項目3]) --------------------------- とする事で出来ました。 ただ、今検索を曖昧検索にしようとしています。 --------------------------- select * from TABLE where 項目名 like ("*" & [項目名1] & "*") or 項目名 like ("*" & [項目名2] & "*") or 項目名 like ("*" & [項目名3] & "*") --------------------------- 上記のようにするとプロンプトで未入力(リターン押下)時に 全てを検索対象にしてしまいます 未入力時は、そのプロンプトの条件自体を無効にしたいです。 何か良い方法はありますでしょうか?

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

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

ここで言ってる「プロンプト」とは、コマンドプロンプトではなく、Accessのクエリ実行時にパラメータ入力を要求してくる「ダイアログ」のことを指しているのでしょうか?(これをプロンプトを言われても判らない人が多いと思いますが・・・) もしそうなら、以下のようなSQLにすれば逝けると思います。 select * from TABLE where ([項目名1] is not null and 項目名 like ("*" & [項目名1] & "*")) or ([項目名2] is not null and 項目名 like ("*" & [項目名2] & "*")) or ([項目名3] is not null and 項目名 like ("*" & [項目名3] & "*")) []のパラメータ名が同じものは、何度出てきても1種類につき1回しか出てきません。

evaag777
質問者

お礼

すみません。表記がおかしかったですね。 ダイアログの事です。 ご回答、どうもありがとうございます。

その他の回答 (1)

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

どのような方法で項目を入力させているかがはっきりとわからないので推測ですが・・・ 入力されていない項目名*の検索条件をwhere句から無くすのはだめなんでしょうか? たとえば、項目名2が未入力なら・・・ select * from TABLE where 項目名 like ("*" & [項目名1] & "*") or 項目名 like ("*" & [項目名3] & "*") にするとか・・・

evaag777
質問者

補足

入力はプロンプトで行います。 [項目名1] とする事でクエリ実行時に 項目名1を聞いてくるプロンプトが立ち上がってきてます。 プロンプトは3つ必ず上がってくるのですが、 状況により1つ入力したり、2つ入力したり という事を行いたいのです。 その時、入力されてなかったら、条件自体無かった事に したいのです。 最初から、[項目名]の条件を2つにすると プロンプトは2つしか上がってきません。

関連するQ&A

  • ワイルドカードの検索

    項目に'%'が入力されているデータを抽出したいのですが、 以下のようなSQLだとデータがすべて抽出されていまいます。  SELECT *   FROM t_table  WHERE code_name LIKE '%%%' '%'を検索するにはどうのようにすればいいのでしょうか?

  • 置換変数とLIKE条件

    SQL文で「SELECT * FROM テーブル名 WHERE 列名 LIKE = '&%'」で実行するとレコードは選択されませんとなり、変数をの入力もできません。 置換変数とLIKE条件は一緒に使えないのでしょうか?

  • SQLでlike検索条件を副問い合わせ結果にしたい

    SQLでlike検索する際、検索キーワードを副問い合わせの結果文字列とする方法があればご教示下さい。 イメージでは、、、 select A1列 from A表 where A1列 like '(select B列 from B表 where 条件)'; みたいなのが可能であればいいのですが。。。( 宜しくお願いします。

  • MySQL WHERE句のLIKE検索

    初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。

  • LIKE検索の場合うまくいきません

    WEBアプリとSQLServerでSELECTをするときに不正をされないように SELECT * FROM DB WHERE DB.A = 検索文字 を SELECT * FROM DB WHERE DB.A= @A のようにして、@Aを後で指定しますが、 SELECT * FROM DB WHERE LIKE '%検索文字' のようにLIKE検索の場合うまくいきません。 どのように記述したらいいのでしょうか? SELECT * FROM DB WHERE DB.A LIKE @A --> 駄目 SELECT * FROM DB WHERE DB.A LIKE '%@A' --> 駄目

  • LIKEで検索

    MySQL 4.0.20 + PHP で名前が入ったテーブルよりLIKEを使って検索すると全然関係のない名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らむ' 上記で検索すると 「とも」って名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らな' だと 「るる」って名前も引っ張ります。 どうも「ら行」の検索がうまく出来ないようです。 何か回避方法はあるのでしょうか? よろしく御願いします

    • ベストアンサー
    • MySQL
  • RLIKE vs LIKE

    ■1 SELECT `id` FROM `user` WHERE `stat` RLIKE ',1,' ■2 SELECT `id` FROM `user` WHERE `stat` LIKE '%,1,%' 1と2では、どちらが速いのでしょうか? また、 ■3 SELECT `id` FROM `user` WHERE `text` RLIKE ',(1|6|3),' ■4 SELECT `id` FROM `user` WHERE `stat` LIKE '%,1,%' OR `stat` LIKE '%,6,%' OR `stat` LIKE '%,3,%' 3と4の様に検索する値が増えて行った場合では、どちらが速いのでしょうか? ベンチとれと言われればそれまでですが、お時間頂ければ、ご教授の程 、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQL(4.1)でのサブクエリ結果をLIKE演算子を用いて検索したいです。

    漢字名を入力してもらい、personalテーブルを参照して漢字(personal.j_search)からローマ字名(personal.e_search)のレコードから副問い合わせをして、gijirokuテーブルから漢字名を含む行とローマ字を含む行をOR検索したいです。 下記のとおり考えましたが。。。 副問い合わせの結果がLIKE演算子できません。 (和名でのLIKE検索とローマ字名の検索は、できますが、ローマ字名をLIKE検索する方法がわかりません。) 教えてください。 SELECT * FROM gijiroku WHERE gijiroku.title LIKE '%山田太郎%' OR gyouseki.title = ANY (SELECT personal.e_search FROM personal WHERE personal.j_search LIKE '%山田太郎%')

  • like文の書き方を教えてください。

    テキストボックスを作成して入力した値がデータベースに 格納されている場合表示されるSQL文を書いていますが syntaxエラーになってしまい原因がわかりません。 String name = request.getParameter("name"); //入力された名前 String sql = new String(); <%-- SQL文 --%> sql += " select * from data "; sql += " where name "; sql += " like" + "('%" + s_name + "%')"; sql += " ) "; <input type="text" name="name" value=""> //textBox エラー表示 8番目: SQL = select * from data where name like('%i%') ) 9番目: ResultSetに格納失敗 : java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1  となってしまいます。 コマンドプロンプト上で select * from data where name like('%itou%'); この場合はちゃんと表示されます。 お分かりになる方よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 複数カラムに対するLIKE文の最適化

    column1~column3のデータに文字検索をしたいのですが、 下記のような不恰好なSQLしか思いつきません、、。 select * from tb where   ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' ) and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' ) and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' ) 試しに、 select * from tb where   ( ( column1 or column2 or column3) like '%word1%' ) and ( ( column1 or column2 or column3) like '%word2%' ) and ( ( column1 or column2 or column3) like '%word3%' ) と考えたのですが、これですと検索結果0件になってしまいます。 もっとスマートなSQL文がありましたら、ご教授頂きたいです。

    • ベストアンサー
    • MySQL