Zde byste použili podmíněné agregace. Například pro červenou a modrou chcete najít karty kde
- existují obě barvy
- neexistuje žádná jiná barva
To znamená, že pokud započítám červenou a modrou kartu, musím získat 2. Pokud spočítám všechny barvy, musím také získat 2. (Stejné pro jednu, tři nebo více barev.)
Použijte tedy tento dotaz a změňte pouze uvedené barvy a počet barev:
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
);