Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL:Направете цветове от таблица с цветове с възможност за търсене

Тук бихте използвали условни агрегации. За червено и синьо например искате да намерите карти, където

  1. и двата цвята съществуват
  2. не съществува друг цвят

Това означава, че ако преброя червено и синьо за карта, трябва да получа 2. Ако преброя всички цветове, трябва да получа и 2. (Същото за един, три или повече цвята.)

Затова използвайте тази заявка и променете само споменатите цветове и броя на цветовете:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да избера по набор от начални знаци?

  2. mysql_upgrade неуспешно - innodb таблици не съществуват?

  3. MySQL:Как да групирате SELECT редове с множество двойки в клауза WHERE

  4. Фалшиво ограничение на външния ключ е неуспешно

  5. Изключение за хибернация на MySQL Cross Join Query