首页 文章

MYSQL:产品 - 属性关系

提问于
浏览
0

我想弄清楚产品和产品属性之间的关系 . 我有一个 product 表和一个 product_attributes 表 . 产品可以有多个属性 . 我需要一个查询来查找具有一个特定属性和另一个特定属性的所有产品 . 例如 . 带有attribute_value_id的产品"1"此产品还必须具有attribute_value_id IN(2,3,4)

我以为这会做到,但它没有:

SELECT DISTINCT p.product_id 
FROM `product` p 
JOIN `product_attribute` pa ON (p.product_id = pa.product_id) 
WHERE pa.attribute_value_id = 1 AND pa.attribute_value_id IN(2, 3, 4)

产品

PRODUCT_ID

product_attribute

product_id | attribute_id | attribute_value_id

attribute_id是属性组(例如颜色,性别)attribute_value_id是特定值(例如蓝色,男性,女性)

换句话说,我需要所有蓝色或红色的产品 .

有什么建议?先感谢您 . 任何帮助赞赏 .

1 回答

  • 0

    可能有点晚了,但我猜迟到总比没有好:p

    subquery 选择 condition 1condition 2 匹配的记录 . 如果产品符合这两个条件,则结果中将显示2行 .

    outer query 对结果执行 count() 并检查 count = 2 ,输出不同的 product ,其中匹配2个条件 .

    -- outer query
    SELECT
        a.product_id, count(a.attribute_value_id) as attribute_count
    FROM
    
    -- subquery
    (
        SELECT p.*, pa.attribute_value_id
        FROM
            product p
            JOIN product_attribute pa 
                ON (p.product_id = pa.product_id) 
        WHERE
            -- condition 1
            pa.attribute_value_id = 1 
            -- condition 2
            OR pa.attribute_value_id IN(2, 3, 4)
    ) a
    
    GROUP BY a.product_id
    HAVING attribute_count = 2;
    

相关问题