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文なってしまいました。
もう少しスマートにする方法はありませんか?
No.2ベストアンサー
- 回答日時:
>like '%4%'
のような前方後方一致はSQLの不得意分野で基本的にインデックスはきかないため、
なにをやっても高速化は期待できません
遅くても気にしないなら適当なセパレータを使って連結してからlikeを使えば
書式はすっきりします(さらにスピードはおちると思いますが・・・)
select * from tb where
concat_ws(char(0),bang,name,tuki) like '%4%;
ただし、この場合もbang,name,tukiは文字列型のカラムでnullがないことが前提になります
そうでない場合は例外処理をいくつかかます必要があるでしょう
No.1
- 回答日時:
「複数カラムで、LIKE "%検索語%"」 を上の検索欄に入れると、結構頻出質問のようですよ。
簡単に言うと、検索対象カラムを全部文字列連結(mysqlではconcat関数を使う)して like "%検索語%" で比較する。
カラム名をつぶさに並べないとならないのは同じだけど、like 以降は一回でよい。
しかし、実行時間は、like条件をorで繋げるのと替わらないか、逆に遅くなるか。いずれにしても対象行が増えるととても遅くなります。千行くらいでは、あんまり実感しないけど、万を超えるとやはり体感的にも遅い。。。
ほかにも、いくつか注意点が有るので、上記でヒットしたページの回答もつぶさに読んでください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL SELECT my_items.item_name, carts.count カンマ, の意味? 2 2023/01/23 07:12
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- Oracle SQL update方法 2 2022/06/22 14:07
- PostgreSQL postgreSQL カラムの全ての値を取得したい 3 2022/10/07 12:33
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
複数カラムに対するLIKE文の最適化
MySQL
-
SQLのWHEREで全てを質問する方法
PHP
-
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
-
4
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
5
whereで全てを検索する方法
MySQL
-
6
SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか
MySQL
-
7
GROUP BYを行った後に結合したい。
Oracle
-
8
副問合せの書き方について
SQL Server
-
9
LIKEの右側にカラムを指定できますか?
MySQL
-
10
データベースのINT型項目にNULLはNG?
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MYSQLで全てのカラムから検索す...
-
GREATESTで NULLをスルーする方...
-
一部のカラムでdistinctし全て...
-
構造が異なる二つのテーブルをu...
-
AUTO_INCREMENTに0はダメ?
-
コンボボックスの抽出条件のLik...
-
カラムをコピーして、新規カラ...
-
MySQLで先頭にカラムを追加
-
now()かCURRENT_TIMESTAMPか
-
UNIONする際、片方テーブルしか...
-
エクセルかワードで家系図を作...
-
sql , insert で空行(全ての列...
-
SQLでカラムを追加し、条件に合...
-
自動販売機でホットとアイスが...
-
MySQL(5.5)1テーブル内のカラ...
-
SELECT文で、指定カラム以外の...
-
Null.ブランク.スペースの違い...
-
ROUND関数で、四捨五入ができな...
-
テーブルの列数を調べたい
-
INDIRECT関数の代替方法は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT文で、指定カラム以外の...
-
一部のカラムでdistinctし全て...
-
UNIONする際、片方テーブルしか...
-
GREATESTで NULLをスルーする方...
-
now()かCURRENT_TIMESTAMPか
-
SQLでカラムを追加し、条件に合...
-
MYSQLで全てのカラムから検索す...
-
AUTO_INCREMENTに0はダメ?
-
sql , insert で空行(全ての列...
-
DBエラーの意味
-
MySQLで先頭にカラムを追加
-
構造が異なる二つのテーブルをu...
-
カラムをコピーして、新規カラ...
-
カラムとコラムの使い分け
-
エクセルかワードで家系図を作...
-
頭に0が付く文字
-
空文字のアップデート
-
文字列のカラムを数字と比較したい
-
ドロップダウンリストの連動し...
-
【SQL】select に ワイルドカー...
おすすめ情報