我有在Product_Attributes表上连接Products表的查询。我'我希望得到的产品具有良好的条件。
选择了属性ID为9和16的产品,但是当我运行此查询时,我只会获得符合第一个ID的产品
WHERE ("AttributeValueID" = 9 AND "AttributeValueID" = 16)
我需要这些产品同时选择两个属性AttributeValueID = 9 AND AttributeValueID = 9 not only this or that attribute ID.
使用OR / IN
对我来说不是解决方案。
更新
下面的是查询的一部分,其中包含join / where:
LEFT JOIN" Product_Attributes" ON" Product_Attributes"。" ProductID" =" SiteTree_Live"。" ID"在哪里(" PriceTax"> =' 100' AND" PriceTax"< =' 200')AND(" AttributeValueID&# 34; IN(' 9',' 8',' 7'))和(" AttributeValueID" IN(' 5&#) 39;,' 4'))
提前感谢您的帮助
答案 0 :(得分:4)
这是“set-within-sets”查询的示例。我想使用group by
和having
解决这些问题,因为这是一种非常灵活的方法:
select pa.ProductId
from ProductAttributes pa
group by pa.ProductId
having sum(AttributeValueId = 9) > 0 and
sum(AttributeValueId = 16) > 0;
答案 1 :(得分:0)
Gordon的回答显示了获得符合指定条件的ProductId值列表的最灵活方式。
您可以使用像Gordon这样的查询(获取ProductId的集合)作为内联视图,并对products表执行JOIN操作,如下所示:
SELECT p.ProductID
, p.ProductName
, ...
FROM products p
JOIN (
SELECT a.ProductID
FROM ProductAttributes a
GROUP BY a.ProductId
HAVING SUM(a.AttributeValueID=9) > 0
AND SUM(a.AttributeValueID=16) > 0
) s
ON s.ProductID = p.ProductID
<强>更新强>
基于对添加SQL文本片段的问题的编辑:
JOIN ( SELECT a.ProductID
FROM Product_Attributes a
HAVING SUM(a.AttributeValueID IN ('9','8','7')) > 0
AND SUM(a.AttributeValueID IN ('5','4')) > 0
GROUP BY a.ProductID
) s
ON s.ProductID = SiteTree_Live.ID
WHERE SiteTree_Live.PriceTax >= '100'
AND SiteTree_Live.PriceTax <= '200'