Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL :Rendre les couleurs de la table des couleurs consultables

Vous utiliseriez des agrégations conditionnelles ici. Pour le rouge et le bleu par exemple, vous voulez trouver des cartes où

  1. les deux couleurs existent
  2. aucune autre couleur n'existe

Cela signifie que si je compte le rouge et le bleu pour une carte, je dois obtenir 2. Si je compte toutes les couleurs, je dois également obtenir 2. (Idem pour une, trois couleurs ou plus.)

Utilisez donc cette requête et ne modifiez que les couleurs mentionnées et le nombre de couleurs :

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
);