Bạn sẽ sử dụng các tổng hợp có điều kiện ở đây. Ví dụ:đối với Đỏ và Xanh, bạn muốn tìm thẻ ở đâu
- cả hai màu đều tồn tại
- không có màu nào khác tồn tại
Điều đó có nghĩa là nếu tôi đếm Đỏ và Xanh cho một thẻ, tôi phải nhận được 2. Nếu tôi đếm tất cả các màu, tôi cũng phải nhận được 2. (Tương tự cho một, ba hoặc nhiều màu.)
Vì vậy, hãy sử dụng truy vấn này và chỉ thay đổi các màu được đề cập và số lượng màu:
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
);