Ще искате да разгледате find_in_set()
функция:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
За да работи това, разделеният със запетаи списък не трябва да съдържа кавички (освен ако вашите потребителски имена действително не съдържат кавички) и не трябва да се допълва с интервали:
SET @valid_users := 'admin,jrock,kmicka,First Last';
За да отговоря директно на въпроса ви относно „защо една променлива в NOT IN
филтърна работа", това е защото @valid_users
се третира като низ и когато го подадете към IN()
, той се третира като единичен низ (т.е. не набор/списък). С FIND_IN_SET()
, той третира низа в @valid_users
като разделен със запетая набор/списък и го използва съответно.