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.