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

MySQL САМО IN() еквивалентна клауза

този проблем се нарича Relational Division

SELECT boy_id 
FROM   boys_chocolates 
WHERE  chocolate_id IN ('$string')
GROUP  BY boy_id 
HAVING COUNT(DISTINCT chocolate_id) = ? -- <<== number of chocolates specified

пример:

SELECT boy_id 
FROM   boys_chocolates 
WHERE  chocolate_id IN (1,2,3,4)
GROUP  BY boy_id 
HAVING COUNT(DISTINCT chocolate_id) = 4

обаче, ако chocolate_id е уникален за всеки boy_id , DISTINCT ключовата дума не е задължителна.

SELECT boy_id 
FROM   boys_chocolates 
WHERE  chocolate_id IN (1,2,3,4)
GROUP  BY boy_id 
HAVING COUNT(*) = 4

АКТУАЛИЗИРАНЕ 1

...Искам да избера момчета от масата, които иматточно шоколадите, които споменавам. Не повече, не по-малко...

SELECT boy_id 
FROM   boys_chocolates a
WHERE  chocolate_id IN (1,2,3,4) AND
        EXISTS 
        (
            SELECT  1
            FROM    boys_chocolates b
            WHERE   a.boy_ID = b.boy_ID
            GROUP   BY boy_id
            HAVING  COUNT(DISTINCT chocolate_id) = 4
        )
GROUP  BY boy_id
HAVING COUNT(*) = 4



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при подготвени изявления на Java MYSQL:Проверете синтаксиса за използване близо до '?' на ред 1

  2. Откъде мога да изтегля mysql jdbc jar?

  3. Грешка във външния ключ на MySQL 1005 errno 150 първичен ключ като външен ключ

  4. Обединяване на различни таблици въз основа на стойност на колоната

  5. MySQL:индексни json масиви с променлива дължина?