WHERE IN
yêu cầu tập hợp giá trị phải được chỉ định theo nghĩa đen trong truy vấn, không phải là một giá trị duy nhất chứa một chuỗi được phân tách bằng dấu phẩy. Nếu bạn viết:
WHERE 6 IN (a.allowed_activity)
nó sẽ xử lý a.allowed_activity
chỉ là một giá trị duy nhất và so sánh nó với 6
, không phải là một tập hợp nhiều giá trị để tìm kiếm.
FIND_IN_SET
tìm kiếm một chuỗi được phân tách bằng dấu phẩy cho giá trị.
Một cách khác để xem nó là IN
là một phím tắt cho một loạt các =
kiểm tra kết hợp với OR
:
WHERE x IN (a, b, c, d)
là viết tắt của
WHERE x = a OR x = b OR x = c OR x = d
Khi bạn viết lại nó như thế này, bạn có thể thấy rõ ràng tại sao nó không hoạt động với một cột chứa một chuỗi được phân tách bằng dấu phẩy. Nó chỉ đơn giản là dịch
WHERE 6 IN (a.allowed_activity)
tới:
WHERE 6 = a.allowed_activity