MySQLで特定のカラムに含まれている数値を複数の文字列を条件に取得したいっ!(FIND_IN_SET)
2024年12月12日
最近SQLを直接書く機会があり、こんな書き方もあるんやなーと思ったのでメモ。
条件が数値であれば普通に
SELECT * FROM users WHERE id IN (10,11,12);
ですが、条件がテキストになっている場合に以下のようにそのままINに渡してもエラーになってしまいます。
SET @ids = "10,11,12"; SELECT * FROM users WHERE id IN @ids;
FIND_IN_SET
そこでFIND_IN_SETに変更します。
FIND_IN_SETに渡すのは
FIND_IN_SET(カラム, "カンマ区切りの条件")
なので、以下のようにすれば@idsが含まれるusersを取得することができました。
SET @ids = "10,11,12"; SELECT * FROM users WHERE FIND_IN_SET(id, @ids);
(否定)NOT FIND_IN_SET
NOTにすると否定になるのはINと同じですが、
@ids以外のidを条件に取得もできます。
SET @ids = "10,11,12"; SELECT * FROM users WHERE NOT FIND_IN_SET(id, @ids);