like句でカラムの値が固定値に部分一致するレコードを検索するSQL
例えば「商品テーブルから商品名に「あ」という文字を含むレコードを検索する」といったSQLはよくありますが、逆に商品名がある文字列に部分一致するものを検索するSQLというのを書きたかったので調べてみました。
まず、「商品テーブルから商品名に「あ」という文字を含むレコードを検索する」というSQLですが、
select * from `商品テーブル` where `商品名` like '%あ%';
という風に記述することができます。
前方一致だったら
select * from `商品テーブル` where `商品名` like 'あ%';
後方一致だったら
select * from `商品テーブル` where `商品名` like '%あ';
となります。
上記を踏まえて、今回の逆バージョンを見てみましょう。
以下のようになります。
select * from `商品テーブル` where 'スパイスカレーうどん' like concat('%',`商品名`,'%')
この場合、商品名カラムが「スパイス」や「カレー」、「うどん」、「カレーうどん」になっているレコードを検索できることになります。
「concat」関数を用いることでlikeの後ろにカラムをもってくることができるところがポイントです。