不遵守 WHERE 条件
WHERE condition isn't respected
目前我正在使用 AdventureWorks 数据库并处理一些查询。我试图解决以下练习:
按 ProductID 订购所有产品,
- 至少收到一次价格修改
- 颜色为'Yellow'、'Blue'或'Black'
- 列在 'Helmets' 或 'Gloves' 类别
这是我的查询:
SELECT pp.ProductID, pp.Name, pps.Name FROM Production.Product pp
JOIN Production.ProductCostHistory ppch
ON pp.ProductID = ppch.ProductID
JOIN Production.ProductSubcategory pps
ON pps.ProductSubcategoryID = pp.ProductSubcategoryID
WHERE pps.Name LIKE 'Helmets' OR pps.Name LIKE 'Gloves'
AND pp.Color LIKE 'Yellow' OR pp.Color LIKE 'Blue' OR pp.Color LIKE 'Black'
GROUP BY pp.ProductID, pp.Name, pps.Name
HAVING Count(ppch.ModifiedDate) > 1
ORDER BY pp.Name ASC
这是我的结果:
现在,提出我的问题。尽管我将两个条件与 'AND' 联系起来,但我收到了另外两个类别的结果,这些类别进一步列出了匹配的颜色('Road Frames' & 'Road Bikes') 我不太明白为什么。
结果不应该只显示满足两个条件的匹配项吗?
我确信可能有更好的方法来实现这一点,但我对 SQL 还很陌生,正在努力学习基础知识。
非常感谢您的帮助
更改 WHERE 子句以明确指示条件组,而不是让 AND 和 OR 的优先级决定结果。
WHERE
(pps.Name LIKE 'Helmets' OR pps.Name LIKE 'Gloves')
AND
(pp.Color LIKE 'Yellow' OR pp.Color LIKE 'Blue' OR pp.Color LIKE 'Black')
或更好
WHERE pps.Name IN('Helmets','Gloves')
AND
pp.Color IN ('Yellow','Blue','Black')
目前我正在使用 AdventureWorks 数据库并处理一些查询。我试图解决以下练习:
按 ProductID 订购所有产品,
- 至少收到一次价格修改
- 颜色为'Yellow'、'Blue'或'Black'
- 列在 'Helmets' 或 'Gloves' 类别
这是我的查询:
SELECT pp.ProductID, pp.Name, pps.Name FROM Production.Product pp
JOIN Production.ProductCostHistory ppch
ON pp.ProductID = ppch.ProductID
JOIN Production.ProductSubcategory pps
ON pps.ProductSubcategoryID = pp.ProductSubcategoryID
WHERE pps.Name LIKE 'Helmets' OR pps.Name LIKE 'Gloves'
AND pp.Color LIKE 'Yellow' OR pp.Color LIKE 'Blue' OR pp.Color LIKE 'Black'
GROUP BY pp.ProductID, pp.Name, pps.Name
HAVING Count(ppch.ModifiedDate) > 1
ORDER BY pp.Name ASC
这是我的结果:
现在,提出我的问题。尽管我将两个条件与 'AND' 联系起来,但我收到了另外两个类别的结果,这些类别进一步列出了匹配的颜色('Road Frames' & 'Road Bikes') 我不太明白为什么。
结果不应该只显示满足两个条件的匹配项吗?
我确信可能有更好的方法来实现这一点,但我对 SQL 还很陌生,正在努力学习基础知识。
非常感谢您的帮助
更改 WHERE 子句以明确指示条件组,而不是让 AND 和 OR 的优先级决定结果。
WHERE
(pps.Name LIKE 'Helmets' OR pps.Name LIKE 'Gloves')
AND
(pp.Color LIKE 'Yellow' OR pp.Color LIKE 'Blue' OR pp.Color LIKE 'Black')
或更好
WHERE pps.Name IN('Helmets','Gloves')
AND
pp.Color IN ('Yellow','Blue','Black')