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

必要な属性を持つ製品を入手する

    各フィルターはproducts_attributes_values内の完全に異なるレコードを調べる必要があるため、2つのフィルターは別々に処理する必要があります。 テーブル。

    SELECT * FROM products
    WHERE category_id IN ('6', '7', '29', '8', '9', '36')
        AND id IN (
            SELECT product_id
            FROM products_attributes_values
            WHERE attribute_id = 2
                AND value_id = '4')
        AND id IN (
            SELECT product_id
            FROM products_attributes_values
            WHERE attribute_id = 3
                AND value_id = '11')
    

    UAMotoから:

    動作はしますが少し遅いので、ある人が私に言ったように、joinエイリアスを使用しました:

    "SELECT * FROM `products`
    JOIN `products_attributes_values` AS pav1
    ON (`pav1`.`product_id` = `products`.`id`)
    JOIN `products_attributes_values` AS pav2
    ON (`pav2`.`product_id` = `products`.`id`)
    WHERE `category_id` IN ('6', '7', '29', '8', '9', '36')
    AND (`pav1`.`attribute_id` = '2' AND `pav1`.`value_id` = '4')
    AND (`pav2`.`attribute_id` = '3' AND `pav2`.`value_id` = '11')"
    

    属性の組み合わせに関するクエリを更新しました:

    SELECT * FROM products
    WHERE category_id IN ('6', '7', '29', '8', '9', '36')
        AND id IN (
            SELECT product_id
            FROM products_attributes_values
            WHERE attribute_id = 2
                AND value_id IN ('4', '5'))
        AND id IN (
            SELECT product_id
            FROM products_attributes_values
            WHERE attribute_id = 3
                AND value_id IN ('11', '62'))
    

    または

    SELECT *
    FROM `products`
        JOIN `products_attributes_values` AS pav1 ON (`pav1`.`product_id` = `products`.`id`)
        JOIN `products_attributes_values` AS pav2 ON (`pav2`.`product_id` = `products`.`id`)
    WHERE `category_id` IN ('6', '7', '29', '8', '9', '36')
    AND (`pav1`.`attribute_id` = '2' AND `pav1`.`value_id` IN ('4', '5'))
    AND (`pav2`.`attribute_id` = '3' AND `pav2`.`value_id` IN ('11', '62'))
    



    1. Oracle行の複数の列でピボットを使用する

    2. pgpredict –PostgreSQLの予測分析

    3. Power BIクエリエディターでの列のピボット、ピボット解除、および分割

    4. 見出しとして日付と連結された列の日に基づく