Tôi nghĩ rằng bạn đang theo đuổi điều này:
SELECT image_id
FROM list
WHERE (style_id, style_value) IN ((24,'red'),(25,'big'),(27,'round'))
GROUP BY image_id
HAVING count(distinct style_id, style_value)=3
Bạn không thể sử dụng AND, vì các giá trị không được 24 red
và 25 big
và 27 round
đồng thời trong cùng một hàng, nhưng bạn cần kiểm tra sự hiện diện của style_id, style_value
trong nhiều hàng, dưới cùng một image_id
.
Trong truy vấn này, tôi đang sử dụng IN (trong đó, trong ví dụ cụ thể này, tương đương với OR) và tôi đang đếm các hàng riêng biệt phù hợp. Nếu 3 hàng riêng biệt khớp nhau, điều đó có nghĩa là cả 3 thuộc tính đều có mặt cho image_id
đó và truy vấn của tôi sẽ trả về.