2025-04-07
MariaDB覚書 カンマ区切りの文字列を縦に並べる
某QAサイトを眺めてまして、
まぁ上記のようなことをやりたいと質問している人がいて、
そもそも、DBなんだから、そんなことやる必要ないだろ?、とか逆だろ?とか
書いてあるのね。
いやいや、やりたいんだからしょうがないでしょ!!
って思うんですよ、私は。
と、質問者でもないのに、勝手に外野がイキリ立ってもしょうがないだけどさ。
で、なんとか簡単にできないものかって思って調べてたら、FIND_IN_SETというものが使えそうなんだね。
FIND_IN_SET
例えば、
SELECT FIND_IN_SET(‘a’, ‘a,c,d’)
とすると、1と返ってくる。
SELECT FIND_IN_SET(‘d’, ‘a,c,d’)
とすると、3と返ってくる。
んで、
SELECT FIND_IN_SET(‘e’, ‘a,c,d’)
とすると0って返ってくる。
つまりは、第1引数で設定したものが第2引数のどこにあるか、教えてくれるわけ。
で、このままだとアレなんで、これにマスタを紐づけてやるの。
cd |name
—————
egg |たまご
bacon |ベーコン
apple |りんご
cubet |キャベツ
という、sozai テーブルがあったとして、
これを使って、文字列 ’bacon,apple’ を縦にするのよ!
1 2 3 | SELECT cd, name FROM sozai WHERE FIND_IN_SET(cd, 'bacon,apple' ) > 0 |
とすると、
cd |name
—————
bacon |ベーコン
apple |りんご
と、表示される!!
え、sozaiテーブルみたいなマスタテーブルないとダメじゃんって?
まぁ、そこはご愛敬ということで・・・