sql >> Databasteknik >  >> RDS >> Mysql

MySQL ONLY IN() motsvarande klausul

detta problem kallas 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

exempel:

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

dock om chocolate_id är unik för varje boy_id , DISTINCT sökord är valfritt.

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

UPPDATERING 1

...Jag vill välja pojkar från bordet som har exakt de chokladen jag nämner. Inte mer inte mindre...

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. Generera slumpmässiga heltal utan kollisioner

  2. Använda MS Access-data i en brevkoppling

  3. Tillkännager MariaDB 10.2 Support - ClusterControl 1.5

  4. MySQL:hämta ett stort urval i bitar