Mysql
 sql >> Database >  >> RDS >> Mysql

SQL:rende ricercabili i colori dalla tabella dei colori

Useresti le aggregazioni condizionali qui. Per il Rosso e il Blu, ad esempio, vuoi trovare le carte dove

  1. Esistono entrambi i colori
  2. non esiste altro colore

Ciò significa che se conto Rosso e Blu per una carta devo ottenere 2. Se conto tutti i colori devo anche ottenere 2. (Lo stesso per uno, tre o più colori.)

Quindi usa questa query e cambia solo i colori menzionati e il numero di colori:

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