Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lọc hàng từ cột giá trị phân cách bằng dấu phẩy trong MySQL: Dùng FIND_IN_SET thay vì IN()

Tạo bảng quốc gia (CSV trong một cột)

mysql> CREATE TABLE DemoTable1423 (CountryName VARCHAR(100));
INSERT INTO DemoTable1423 VALUES('AUS,UK'),('US'),('AUS,UK,US');

Dữ liệu

mysql> SELECT * FROM DemoTable1423;
+-------------+
| CountryName |
+-------------+
| AUS,UK      |
| US          |
| AUS,UK,US   |
+-------------+

Vấn đề: IN() không hoạt động trên chuỗi CSV

WHERE CountryName IN ('US') chỉ khớp chính xác 'US', không khớp 'AUS,UK,US'.

Giải pháp: FIND_IN_SET

mysql> SELECT * FROM DemoTable1423 WHERE FIND_IN_SET('US', CountryName);

Kết quả: 2 hàng chứa 'US'

+-------------+
| CountryName |
+-------------+
| US          |
| AUS,UK,US   |
+-------------+

Lưu ý: FIND_IN_SET tối ưu cho chuỗi CSV đơn giản. Với dữ liệu lớn, nên chuẩn hóa (normalize) thành bảng riêng (many-to-many) để dùng JOIN và index hiệu quả.