• ベストアンサー

whereの使い方が分からないのですが…

foodテーブルの全ての項目内から「りんご」「みかん」というのキーワードをAND検索させたいのですが、 select * from food where ("りんご" AND "みかん"); select * from food where * "りんご" AND "みかん"; select * from food where *="りんご" AND *="みかん"; select * from food where *=("りんご" AND "みかん"); 思いつく限り試しましたが、どれもうまく行きません。 select * from food where (a="りんご" AND a="みかん") or (b="りんご" AND b="みかん") or (c="りんご" AND c="みかん") or… と、延々と続いて書くしかないのでしょうか? 何か方法はありますか?

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

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

各カラムにテキストデータが入っていて、いずれかのカラムのデータに"りんご"と"みかん"の両方を含んでいるものを選びたい、というのなら、この手もありますね。 SELECT * FROM `food` WHERE OR (`a` LIKE '%りんご%' AND `a` LIKE '%みかん%') OR (`b` LIKE '%りんご%' AND `b` LIKE '%みかん%') OR (`c` LIKE '%りんご%' AND `c` LIKE '%みかん%') LIKEを使えば?……という No.3 さんのサジェスチョンはこの意味か……と。 質問者からの補足説明が欲しいところですけれど(もう急いでもいないのかも)。

tomatocot
質問者

お礼

すみません結局一つ一つのテーブルから検索していく事で解決しました。 大変ご迷惑おかけし申し訳ありませんでした。 ご回答ありがとうございました。

その他の回答 (4)

回答No.4

#3さんへ >SQLにおいて文字列比較は=ではなくて >likeを使った方がいいと思うけど どういうアドバイスでしょうか? 「=」条件で検索できるものを、わざわざlikeの方がいいという理由は? likeも前方一致ならともかく、中間一致などは性能上、推薦できません。 こういった類のデータは、果物表等を作り、コードから果物名を見つけて格納するようにすれば何ら問題ないはずですけど?

tomatocot
質問者

お礼

すみません結局一つ一つのテーブルから検索していく事で解決しました。 大変ご迷惑おかけし申し訳ありませんでした。 ご回答ありがとうございました。

  • noro6677
  • ベストアンサー率21% (34/158)
回答No.3

SQLにおいて文字列比較は=ではなくて likeを使った方がいいと思うけど

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

データベースの設計方法がわるいとおもいますよ。 a,b,cフィールドは同じような構成であるなら、 一つのフィールドとして管理すべきでは? なお、今回の件、a~cのフィールドで全ての値が 「りんご」か「みかん」ということであればandとorが逆ですね SELECT * FROM `food` WHERE 1 and (`a`='りんご' OR `a`='みかん') and (`b`='りんご' OR `b`='みかん') and (`c`='りんご' OR `c`='みかん') すこし整理するとこんな感じ SELECT * FROM `fruit` WHERE 1 and `a` IN ('りんご','みかん') and `b` IN ('りんご','みかん') and `c` IN ('りんご','みかん')

回答No.1

延々と書くしかないのですが……これでは1件のデータも出てこないと思います。 たとえば、aというカラムに「りんご」、「みかん」、「なし」、「ぶどう」……というようなデータのどれかが入っているとして、a='りんご' AND a= 'みかん'の条件を満たすデータは存在し得ないのです。他のカラム bやcについても同様で、これらをORでつないでも、どのデータも該当しません。 どのようなデータが入っているのか、何をしたいのかをはっきりさせないと、この質問ではこの回答がせいぜいかと思います。

関連するQ&A