ここでは条件付き集計を使用します。たとえば、赤と青の場合、次の場所でカードを検索します
- 両方の色が存在します
- 他の色は存在しません
つまり、カードの赤と青を数える場合は2を取得する必要があります。すべての色を数える場合は、2も取得する必要があります(1、3、またはそれ以上の色でも同じです)。
したがって、このクエリを使用して、言及されている色と色の数のみを変更してください:
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
);