sql >> Base de Datos >  >> RDS >> Mysql

SQL:hacer que los colores de la tabla de colores se puedan buscar

Usarías agregaciones condicionales aquí. Para Red y Blue, por ejemplo, desea encontrar tarjetas donde

  1. ambos colores existen
  2. no existe otro color

Eso significa que si cuento rojo y azul para una tarjeta, debo obtener 2. Si cuento todos los colores, también debo obtener 2. (Lo mismo para uno, tres o más colores).

Entonces use esta consulta y solo cambie los colores mencionados y la cantidad de colores:

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