我一直试图解决一个事实证明比看起来更困难的问题。
考虑有一个表将产品与属性相关联,它看起来像这样:
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是唯一具有这两个属性的。
如何使用一个查询实现此目的?
我希望我明白我的问题。
感谢。
答案 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;