Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Farben aus Farbtabelle durchsuchbar machen

Sie würden hier bedingte Aggregationen verwenden. Für Rot und Blau zum Beispiel möchten Sie Karten finden, wo

  1. beide Farben existieren
  2. es gibt keine andere Farbe

Das heißt, wenn ich Rot und Blau für eine Karte zähle, muss ich 2 bekommen. Wenn ich alle Farben zähle, muss ich auch 2 bekommen. (Das Gleiche gilt für eine, drei oder mehr Farben.)

Verwenden Sie also diese Abfrage und ändern Sie nur die genannten Farben und die Anzahl der Farben:

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