Du kommer att vilja ta en titt på MySQL:s find_in_set()
funktion:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
För att detta ska fungera bör den kommaseparerade listan inte innehålla citattecken (såvida inte dina användarnamn faktiskt innehåller citattecken) och bör inte vara utfylld med mellanslag:
SET @valid_users := 'admin,jrock,kmicka,First Last';
För att direkt svara på din fråga om "varför skulle en variabel i NOT IN
filter fungerar", beror det på att @valid_users
behandlas som en sträng och när du skickar den till IN()
, den behandlas som en enda sträng (dvs. inte en uppsättning/lista). Med FIND_IN_SET()
, behandlar den strängen i @valid_users
som en kommaseparerad uppsättning/lista och använder den därefter.