MySQLでカンマ区切りデータの中から検索する便利なFIND_IN_SET関数

このエントリーをはてなブックマークに追加

こんにちは、fujinyoです。
MySQLで使える便利な関数を見つけたので記事にします。

カンマ区切りデータが格納されているカラムから特定のデータを抽出したい場合どうしていますか?
僕は、何も考えずに「LIKE検索」していました。

LIKE検索だと遅い
CommaComma / letmehearyousaydeskomdeskom

こんなデータがあるとします。

SAMPLE_TBL
IDVALUE
110,30
240
320,30,50
410,30
550

このデータの中から、VALUEの値に50が含まれる全てのIDを取得したいとします。
結果的にはID:3とID:5が返ってくればOKです。

SELECT ID FROM SAMPLE_TBL WHERE VALUE LIKE '%50%';

これでもできなくはないですが、データ件数が多くなってくるとどうしても処理が重くなっていしまいます。

カンマ区切りデータから検索する場合は FIND_IN_SET関数 を使う

FIND_IN_SET関数
N 個の部分文字列で構成されるリスト strlist に、文字列 str が含まれている場合は、1 から N までのいずれかの値を返す。文字列のリストは、それぞれの間を ‘,’ 文字で区切られた各部分文字列で構成される文字列である。

便利な関数があるんですね。
こんな感じで使います。

SELECT ID FROM SAMPLE_TBL WHERE FIND_IN_SET('50', VALUE);

これで、先ほどのLIKE検索と同じ結果が得られます。
FIND_IN_SET関数はカンマ区切り限定ですが、”-“だったり、”|”で区切られているデータの場合は、REPLACE関数で置換してから使えばいいですね。

では、また。

[PR] 「結さん」があなたに代わって開発案件の依頼主を探します

  • 「既存のクライアントにギャラアップは言いにくい」
  • 「営業活動する時間がないし、苦手」
  • 「仕事が途切れたらどうしよう」

ITエンジニアのこんな悩みを「結さん」が解決してくれます
結さんへの無料会員登録後は提案メールを待つだけです!

関連記事

このエントリーをはてなブックマークに追加