MySQLで特定のカラムに含まれている数値を複数の文字列を条件に取得したいっ!(FIND_IN_SET)

最近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);