आप यहां सशर्त एकत्रीकरण का उपयोग करेंगे। उदाहरण के लिए लाल और नीले रंग के लिए आप ऐसे कार्ड ढूंढना चाहते हैं जहां
- दोनों रंग मौजूद हैं
- कोई अन्य रंग मौजूद नहीं है
इसका मतलब है कि अगर मैं एक कार्ड के लिए लाल और नीला गिनता हूं तो मुझे 2 मिलना चाहिए। अगर मैं सभी रंगों को गिनता हूं तो मुझे भी 2 मिलना चाहिए। (एक, तीन या अधिक रंगों के लिए समान।)
इसलिए इस क्वेरी का उपयोग करें और केवल बताए गए रंगों और रंगों की संख्या को बदलें:
select *
from cards_data where id in
(
select cards_id
from con_cards_colors
group by cards_id
having count(case when colors_id in (select id from colors where name in ('Red','Blue')) then 1 end) = 2 -- i.e. find all
and count(*) = 2 -- i.e. find only those and no others
);