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

MySQL ONLY IN() äquivalente Klausel

Dieses Problem wird als Relational Division bezeichnet

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

Beispiel:

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

wenn jedoch die chocolate_id ist für jede boy_id eindeutig , DISTINCT Schlüsselwort ist optional.

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

AKTUALISIERUNG 1

...Ich möchte Jungs vom Tisch auswählen, die genau die Pralinen haben, die ich erwähne. Nicht mehr und nicht weniger...

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