Trước hết, việc sử dụng các giá trị được phân tách bằng dấu phẩy trong một trường là một vấn đề và thay vào đó, bạn nên cân nhắc việc lưu trữ chúng trong một bảng riêng. Sau đó, bạn có thể lấy bản ghi hiệu quả hơn:
select ...
from mainTable t
inner join valueTable v1 on v1.id = t.id and v1.value = 1
inner join valueTable v2 on v2.id = t.id and v2.value = 2
inner join valueTable v3 on v3.id = t.id and v3.value = 3
Nếu điều đó là không thể, bạn phải đi theo cách kết hợp chuỗi chậm. Để khớp các giá trị trong một chuỗi được phân tách bằng dấu phẩy, bạn có thể sử dụng like
nhà điều hành:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
Đặt dấu phân tách ở cả hai phía của giá trị được tìm kiếm đảm bảo rằng bạn không nhận được bất kỳ kết quả dương tính giả nào. Thêm dấu phẩy trước và sau giá trị trường đảm bảo rằng bạn có thể tìm thấy giá trị đầu tiên và giá trị cuối cùng.