Anda akan menggunakan agregasi bersyarat di sini. Untuk Merah dan Biru misalnya Anda ingin mencari kartu di mana
- kedua warna itu ada
- tidak ada warna lain
Artinya jika saya menghitung Merah dan Biru untuk satu kartu saya harus mendapatkan 2. Jika saya menghitung semua warna saya juga harus mendapatkan 2. (Sama untuk satu, tiga warna atau lebih.)
Jadi gunakan kueri ini dan hanya ubah warna yang disebutkan dan jumlah warna:
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
);