Khi cột lưu chuỗi như '10,20,50', bạn có thể so sánh trực tiếp với IN('10,20,50') - nó khớp chính xác chuỗi toàn bộ, không tách thành các giá trị riêng lẻ.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable1314 (
Number VARCHAR(100)
);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1314 VALUES('45,67,89');
mysql> INSERT INTO DemoTable1314 VALUES('10,20,50');
mysql> INSERT INTO DemoTable1314 VALUES('90,56,45');
Xem dữ liệu:
mysql> SELECT * FROM DemoTable1314;
+----------+ | Number | +----------+ | 45,67,89 | | 10,20,50 | | 90,56,45 | +----------+
Truy vấn với IN():
mysql> SELECT * FROM DemoTable1314 WHERE Number IN('10,20,50');
Kết quả - chỉ khớp chính xác chuỗi:
+----------+ | Number | +----------+ | 10,20,50 | +----------+
⚠️ Cảnh báo quan trọng: IN('10,20,50') KHÔNG tương đương IN(10, 20, 50). MySQL không tự tách chuỗi.
Giải pháp đúng nếu cần tìm các hàng chứa một số trong chuỗi:
- Dùng
FIND_IN_SET(10, Number)(chỉ hoạt động nếu không có khoảng trắng sau dấu phẩy). - Hoặc chuẩn hóa dữ liệu: tách thành bảng liên kết (many-to-many) hoặc dùng JSON (MySQL 5.7+).