मुझे लगता है कि आप इसके पीछे हैं:
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
आप AND का उपयोग नहीं कर सकते, क्योंकि मान 24 red
नहीं हो सकते और 25 big
और 27 round
एक ही समय में एक ही पंक्ति में, लेकिन आपको style_id, style_value
की उपस्थिति की जांच करने की आवश्यकता है एक से अधिक पंक्तियों में, एक ही image_id
. के अंतर्गत ।
इस क्वेरी में मैं IN का उपयोग कर रहा हूं (कि, इस विशेष उदाहरण में, एक OR के बराबर है), और मैं मेल खाने वाली अलग-अलग पंक्तियों की गिनती कर रहा हूं। अगर 3 अलग-अलग पंक्तियाँ मेल खाती हैं, तो इसका मतलब है कि उस image_id
. के लिए सभी 3 विशेषताएँ मौजूद हैं , और मेरी क्वेरी इसे वापस कर देगी।