Mysql 其中条件为';不受尊重

Mysql 其中条件为';不受尊重,mysql,sql,where,Mysql,Sql,Where,目前,我正在使用AdventureWorks数据库并处理一些查询。我试图解决以下问题: 按其ProductID订购所有产品,其中 至少收到一次价格修改 颜色为“黄色”、“蓝色”或“黑色” 属于“头盔”或“手套”类别 这是我的疑问: SELECT pp.ProductID, pp.Name, pps.Name FROM Production.Product pp JOIN Production.ProductCostHistory ppch ON pp.ProductID = ppch.Pr

目前,我正在使用AdventureWorks数据库并处理一些查询。我试图解决以下问题:

按其ProductID订购所有产品,其中

  • 至少收到一次价格修改
  • 颜色为“黄色”、“蓝色”或“黑色”
  • 属于“头盔”或“手套”类别
这是我的疑问:

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
这是我的结果:

现在,提出我的问题。尽管我将两个条件与“和”联系起来,但我收到了另外两个类别的结果,这两个类别在匹配颜色(“道路框架”和“道路自行车”)后面列出,我不明白为什么

结果不应该只显示符合这两种条件的匹配项吗

我确信可能有更好的方法来实现这一点,但我对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')

阅读逻辑条件中的优先级,其中
在条件中使用大括号。。。实际上,它被解释为:pps.Name像‘头盔’或(pps.Name像‘手套’和pp.Color像‘黄色’)或pp.Color像‘蓝色’或pp.Color像‘黑色’。谢谢你的提示!我只是忘记了括号:-/你应该在
(快速)中了解
。你使用像
这样的
是完全不合适的;至少你应该改用
=