查找具有属性列表的产品

时间:2010-04-02 21:29:49

标签: mysql

我一直试图解决一个事实证明比看起来更困难的问题。

考虑有一个表将产品与属性相关联,它看起来像这样:

Products_id | Attribute_id
    21      |      456
    21      |      231
    21      |      26
    22      |      456
    22      |      26
    22      |      116
    23      |      116
    23      |      231

接下来,我有一个attribute_ids列表,我想使用它来获取具有该列表中所有属性的产品。

例如,如果我使用此列表(456,26)在上表中搜索,我应该得到这些product_ids 21和22。 另一个例子,如果我搜索(116,231),我应该得到23,因为产品23是唯一具有这两个属性的。

如何使用一个查询实现此目的?

我希望我明白我的问题。

感谢。

3 个答案:

答案 0 :(得分:3)

如果您手工制作查询:

SELECT Products_ID
  FROM ProductAttributes
 WHERE Attribute_ID IN (116, 231)
 GROUP BY Products_ID
HAVING COUNT(*) = 2;

这要求所有具有给定属性的条目数等于属性数的产品。如果要进行概括,则可以对有趣的产品属性ID值的表进行连接。

答案 1 :(得分:1)

select product_id from products 
where attribute_id in (123,234) 
group by product_id having count(*) = 2

答案 2 :(得分:0)

select products_id from table where attribute_id = 456
intersect
select products_id from table where attribute_id = 26;