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

すべての基準に一致するカテゴリを選択するには、どのmysqlクエリを使用する必要がありますか?

    SELECT  cat_id
    FROM    (
            SELECT  DISTINCT cat_id
            FROM    cat_product
            ) cpo
    WHERE   EXISTS
            (
            SELECT  NULL
            FROM    cat_product cpi
            WHERE   cpi.cat_id = cpo.cat_id
                    AND product_id IN (2, 3)
            LIMIT 1, 1
            )
    

    UNIQUEが必要です (cat_id, product_id)のインデックス (この順序で)これが高速に機能するため。

    このソリューションでは、INDEX FOR GROUP BYを使用します 個別のカテゴリのリストを取得するには、EXISTS 述語はCOUNT(*)よりも少し速くなります (集計にはある程度のオーバーヘッドが必要なため)

    検索する商品が3つ以上ある場合は、最初の引数をLIMITに調整します。 それに応じて。

    LIMIT n - 1, 1である必要があります 、ここでn IN内のアイテムの数です リスト。

    更新:

    リストからすべての製品を保持し、他には何も保持していないカテゴリを返すには、次を使用します:

    SELECT  cat_id
    FROM    (
            SELECT  DISTINCT cat_id
            FROM    cat_product
            ) cpo
    WHERE   EXISTS
            (
            SELECT  NULL
            FROM    cat_product cpi
            WHERE   cpi.cat_id = cpo.cat_id
                    AND product_id IN (2, 3)
            LIMIT 1, 1
            )
            AND NOT EXISTS
            (
            SELECT  NULL
            FROM    cat_product cpi
            WHERE   cpi.cat_id = cpo.cat_id
                    AND product_id NOT IN (2, 3)
            )
    


    1. MySQLでrootユーザーとして設定およびログインする方法

    2. Hibernateを使用した単一列(クラス属性)の遅延フェッチ

    3. £の代わりに�を表示

    4. イベントスケジューラは毎月実行する必要があります