sql >> データベース >  >> RDS >> Mysql

MySQL ONLY 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. パラメータ2を参照で渡すことはできません-uuidPDO

    2. (英語)Oracle Database 19c Pre-BuiltDeveloperVMの使用方法

    3. SQLServerにUpdateストアドプロシージャを挿入します

    4. MySQLはALTERTABLEクエリに対して非常に遅い