Bạn sẽ muốn xem qua find_in_set()
chức năng:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
Để điều này hoạt động, danh sách được phân tách bằng dấu phẩy không được chứa dấu ngoặc kép (trừ khi tên người dùng của bạn thực sự chứa dấu ngoặc kép) và không được đệm bằng dấu cách:
SET @valid_users := 'admin,jrock,kmicka,First Last';
Để trả lời trực tiếp câu hỏi của bạn về "tại sao một biến trong NOT IN
lại bộ lọc hoạt động ", đó là bởi vì @valid_users
đang được coi là một chuỗi và khi bạn chuyển nó vào IN()
, nó được coi là một chuỗi đơn (tức là không phải một tập hợp / danh sách). Với FIND_IN_SET()
, nó xử lý chuỗi trong @valid_users
dưới dạng một tập hợp / danh sách được phân tách bằng dấu phẩy và sử dụng nó cho phù hợp.