sql >> Databáze >  >> RDS >> Mysql

Ekvivalentní klauzule MySQL ONLY IN().

tento problém se nazývá 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

příklad:

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

pokud však chocolate_id je jedinečné pro každé boy_id , DISTINCT klíčové slovo je nepovinné.

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

AKTUALIZACE 1

...chci vybrat ze stolu kluky, kteří majípřesně ty čokolády, které zmiňuji. Ne více, ne méně...

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. Hekaton se zvratem:TVP v paměti – část 1

  2. PHP a MySQL - jak se vyhnout heslu ve zdrojovém kódu?

  3. Jak mohu vybrat řádky v MySQL počínaje daným číslem řádku?

  4. Prohlášení FORALL s dolní a horní hranicí v databázi Oracle