
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか
MySQL
-
複数カラムに対するLIKE文の最適化
MySQL
-
重複していないレコードの抽出方法について
MySQL
-
-
4
whereで全てを検索する方法
MySQL
-
5
GROUP BYを行った後に結合したい。
Oracle
-
6
SQLのWHEREで全てを質問する方法
PHP
-
7
truncate tableを使って複数のテーブルを指定する方法
Oracle
-
8
オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
SQL Server
-
9
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
10
複数カラム検索で、LIKE %検索語%""
MySQL
-
11
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カラムとコラムの使い分け
-
一部のカラムでdistinctし全て...
-
MySQL(5.5)1テーブル内のカラ...
-
ホームページを作ろうと思いま...
-
GREATESTで NULLをスルーする方...
-
カラムをコピーして、新規カラ...
-
SQLで、行ごとのとある要素を比...
-
ROUND関数で、四捨五入ができな...
-
【SQL】select に ワイルドカー...
-
ドロップダウンリストの連動し...
-
smalldate型へnull値の代入
-
AUTO_INCREMENTに0はダメ?
-
now()かCURRENT_TIMESTAMPか
-
MySQLで論理名を取得する方法
-
DBの定義のサイズを大きくし過...
-
INDIRECT関数の代替方法は?
-
他のシートの検索
-
type date にnullをinsert
-
Accessで複数(3以上)...
-
SQL、oracleにて文字列操作(連...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一部のカラムでdistinctし全て...
-
SELECT文で、指定カラム以外の...
-
UNIONする際、片方テーブルしか...
-
ホームページを作ろうと思いま...
-
AUTO_INCREMENTに0はダメ?
-
SQLでカラムを追加し、条件に合...
-
now()かCURRENT_TIMESTAMPか
-
カラムとコラムの使い分け
-
(初心者)MySQLやmaraDBで、crea...
-
GREATESTで NULLをスルーする方...
-
構造が異なる二つのテーブルをu...
-
sql , insert で空行(全ての列...
-
MYSQLで全てのカラムから検索す...
-
エクセルかワードで家系図を作...
-
Excel VBA
-
カラムをコピーして、新規カラ...
-
Mysql DATE型のDEFAULT値
-
ドロップダウンリストの連動し...
-
MySQLで論理名を取得する方法
-
MySQL(5.5)1テーブル内のカラ...
おすすめ情報