Budete se chtít podívat na find_in_set()
funkce:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
Aby to fungovalo, seznam oddělený čárkami by neměl obsahovat uvozovky (pokud vaše uživatelská jména skutečně neobsahují uvozovky) a neměl by být doplněn mezerami:
SET @valid_users := 'admin,jrock,kmicka,First Last';
Chcete-li přímo odpovědět na vaši otázku týkající se „proč by proměnná v NOT IN
filtr funguje“, je to proto, že @valid_users
se zachází jako s řetězcem a když jej předáte do IN()
, je s ním zacházeno jako s jedním řetězcem (tj. ne jako sada/seznam). Pomocí FIND_IN_SET()
, zpracovává řetězec v @valid_users
jako čárkami oddělenou sadu/seznam a podle toho ji používá.