Anda akan ingin melihat find_in_set()
fungsi:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
Agar ini berfungsi, daftar yang dipisahkan koma tidak boleh berisi tanda kutip (kecuali nama pengguna Anda benar-benar berisi tanda kutip) dan tidak boleh diisi dengan spasi:
SET @valid_users := 'admin,jrock,kmicka,First Last';
Untuk langsung menjawab pertanyaan Anda tentang "mengapa variabel dalam NOT IN
filter work", itu karena @valid_users
sedang diperlakukan sebagai string dan ketika Anda meneruskannya ke IN()
, itu diperlakukan sebagai string tunggal (yaitu bukan set/daftar). Dengan FIND_IN_SET()
, ia memperlakukan string dalam @valid_users
sebagai set/daftar yang dipisahkan koma dan menggunakannya sebagaimana mestinya.