- ベストアンサー
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… と、延々と続いて書くしかないのでしょうか? 何か方法はありますか?
- みんなの回答 (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 さんのサジェスチョンはこの意味か……と。 質問者からの補足説明が欲しいところですけれど(もう急いでもいないのかも)。
その他の回答 (4)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#3さんへ >SQLにおいて文字列比較は=ではなくて >likeを使った方がいいと思うけど どういうアドバイスでしょうか? 「=」条件で検索できるものを、わざわざlikeの方がいいという理由は? likeも前方一致ならともかく、中間一致などは性能上、推薦できません。 こういった類のデータは、果物表等を作り、コードから果物名を見つけて格納するようにすれば何ら問題ないはずですけど?
お礼
すみません結局一つ一つのテーブルから検索していく事で解決しました。 大変ご迷惑おかけし申し訳ありませんでした。 ご回答ありがとうございました。
- noro6677
- ベストアンサー率21% (34/158)
SQLにおいて文字列比較は=ではなくて likeを使った方がいいと思うけど
- yambejp
- ベストアンサー率51% (3827/7415)
データベースの設計方法がわるいとおもいますよ。 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 ('りんご','みかん')
- nyaa519323116
- ベストアンサー率51% (41/79)
延々と書くしかないのですが……これでは1件のデータも出てこないと思います。 たとえば、aというカラムに「りんご」、「みかん」、「なし」、「ぶどう」……というようなデータのどれかが入っているとして、a='りんご' AND a= 'みかん'の条件を満たすデータは存在し得ないのです。他のカラム bやcについても同様で、これらをORでつないでも、どのデータも該当しません。 どのようなデータが入っているのか、何をしたいのかをはっきりさせないと、この質問ではこの回答がせいぜいかと思います。
お礼
すみません結局一つ一つのテーブルから検索していく事で解決しました。 大変ご迷惑おかけし申し訳ありませんでした。 ご回答ありがとうございました。