- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MYSQLで全てのカラムから検索する。)
MYSQLで全てのカラムから検索する方法
このQ&Aのポイント
- MYSQLで全てのカラムからの検索についてご質問です。カラムに関係なくレコードのどこかに指定した値が含まれている場合に抽出するSQL文をスマートに書く方法を教えてください。
- 現在、カラム数が増えてきてしまい、非常に長いSQL文になって困っています。もっと効率的な方法があれば教えてください。
- MYSQLで全てのカラムからの検索で、指定した値がどこかに含まれている場合に抽出する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>like '%4%' のような前方後方一致はSQLの不得意分野で基本的にインデックスはきかないため、 なにをやっても高速化は期待できません 遅くても気にしないなら適当なセパレータを使って連結してからlikeを使えば 書式はすっきりします(さらにスピードはおちると思いますが・・・) select * from tb where concat_ws(char(0),bang,name,tuki) like '%4%; ただし、この場合もbang,name,tukiは文字列型のカラムでnullがないことが前提になります そうでない場合は例外処理をいくつかかます必要があるでしょう
その他の回答 (1)
- mpro-gram
- ベストアンサー率74% (170/228)
回答No.1
「複数カラムで、LIKE "%検索語%"」 を上の検索欄に入れると、結構頻出質問のようですよ。 簡単に言うと、検索対象カラムを全部文字列連結(mysqlではconcat関数を使う)して like "%検索語%" で比較する。 カラム名をつぶさに並べないとならないのは同じだけど、like 以降は一回でよい。 しかし、実行時間は、like条件をorで繋げるのと替わらないか、逆に遅くなるか。いずれにしても対象行が増えるととても遅くなります。千行くらいでは、あんまり実感しないけど、万を超えるとやはり体感的にも遅い。。。 ほかにも、いくつか注意点が有るので、上記でヒットしたページの回答もつぶさに読んでください。
お礼
できました。ありがとうございます。