複数条件を含むSQLの書き方

このQ&Aのポイント
  • 複数の条件を含むSQLの書き方について教えてください。
  • name1、name2、name3のいずれかに「りんご」が含まれ、かつhideが0であるレコードを取得する方法を知りたいです。
  • 「select * from apple where hide=0 and (name1 like '%りんご%' or name2 like '%りんご%' or name3 like '%りんご%')」という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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

select * from apple where hide=0 and (name1 lile %りんご% or name2 like %りんご% or name3 like %りんご%) ですね。 select * from apple where hide=0 and name1 lile %りんご% or name2 like %りんご% or name3 like %りんご% だと select * from apple where (hide=0 and name1 lile %りんご%) or name2 like %りんご% or name3 like %りんご% で解釈されます。

a-z_A-Z
質問者

お礼

ありがとうございます。 希望通りの結果になりました。 まさか、カッコをつけるとは思いませんでした。 いろいろ調べたのですが、今回のような検索を解説しているページを見つけることができませんでした。 おかげで大変助かりました。 ありがとございました。

関連するQ&A

  • MYSQLで全てのカラムから検索する。

    tbというテーブルのbangというカラムに4が含まれていれば表示というのは select * from tb where (bang) like '%4%' ; という形になりますが、このtbテーブルにさらにname,tukiというカラムがあったとして カラムに関係なくレコードのどこかに4が入っていれば抽出するというSQL文が書きたいです。 select * from tb where bang like '%4%' or name like '%4%' or tuki like '%4%' ; と書くことで何とか今まではやってきたのですが、カラム数が増えてきてしまったので、ものすごく長いSQL文なってしまいました。 もう少しスマートにする方法はありませんか?

    • ベストアンサー
    • 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
  • SQL(PostgreSQL) select文

    SQLを始めたのですが、少しつまずいたので、質問させてください。 住所録検索等で、 SELECT * FROM test WHERE name LIKE '%goo%'; と書くと、nameというカラム名から goo という文字列の入ったレコードを 検索できると思います。 そこで、この goo という文字列を test テーブル全体から検索したいのですが わかりません。 teat テーブル全体から(どこのカラム名からでも)検索の仕方を教えてください。 初歩的な質問ですみません。 参考HPでもかまいません。

  • 複数条件のSQL文

    こんばんは。 SQL文を書いていますが困っています。 複数条件のつなげ方がうまくいかないのです。 通常のSQLでかけば・・・ (1)WHERE(AreaID='OSAKA') (2)WHERE Size BETWEEN 'S' AND 'LL' (3)WHERE Adrs LIKE '豊中市%' と3文になるような複数のSQL条件を・・・ 「SELECT * FROM ordermaster 」につなげたいと思っています。 どのようにつながれば正解なのでしょうか? 是非とも宜しくお願い致します。

  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?

  • PHP SQL 問合せについて

    PHP SQL 問合せについて http://okwave.jp/qa/q7689206.html での質問の続きとなります。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか? 回答 select * from tableA x order by (select count(*) from tableA y where y.name = x.name ) ,No で解決していますが、 select * from tableA x where name ='果物' とした場合、結果が異なります。 (結果が多い順にならない) 出現回数が多い順に並べるには、どのような記述になりますか? データには「果物以外のデータが含まれている」とします。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 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に、●●が含まれるデータ)

  • likeの使い方

    mySQLの4.1を使っています。 nameカラムに"水辺の蜘蛛"というデータが1件入っています。 select * from myTable where name like "%の蜘蛛%" or name_eng like "%の蜘蛛%" では1件とれるのですが、 select * from myTable where name like "%蜘蛛%" or name_eng like "%蜘蛛%" では0件になります。 何故でしょうか。

    • ベストアンサー
    • MySQL
  • 文字検索 (LIKE)を使った場合

    テーブル「USERS」の項目「FAMILY_NAME」「FIRST_NAME」をつなげた文字列に対して検索を行ないたいのですが、以下の「LIKE」を使ったSQL分ではカラムがないとエラーになるようです。 方法があれば教えて下さい。 よろしくお願いします。 テーブル:USERS 項目: FAMILY_NAME FIRST_NAME 値: 三木 直人 中川 三郎 SELECT CONCAT(FAMILY_NAME,FIRST_NAME) AS USER_NAME FROM USERS WHERE USER_NAME LIKE '%三%'

    • ベストアンサー
    • MySQL
  • SQLについて

    こんにちは、honiyonです。  良い質問タイトルが思いつきませんでした...(^^;  2つのテーブルがあります。(仮定です)   ・オーナーの情報テーブル(owner)   ・オーナーの車の情報テーブル(car)  この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。  これを1つのSQLで   SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN');  とか、   SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno);  とかやってみましたが、涙が出るほど遅いです。  しかし   SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno);  とすると超高速です。  なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。  宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。