sql查询未给出预期结果

9o685dep  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(269)

我使用这个查询从表中获取这些条件下的数据,但查询给我意外的数据。这是我的sql查询。

SELECT userCode, email, isSubscribe FROM users WHERE 1 
    AND (city = 'Boston' AND stateCode = '3fe5003edc0cb6c83962dbd74d35dd50' AND zipcode = '32564')
    OR accountType = 'O' 
    OR helpMoreType = 'DI' 
    OR helpMoreType = 'CO' 
    OR helpMoreType = 'AD'
    AND accountStatus = 'A' 
    AND isSubscribe = 'Y' 
    AND accountType != 'S'

它显示了一个意外的记录 isSubscribe = N 对sql查询进行修改后,它会显示我想要的确切数据,修改后的查询是:

SELECT userCode, email, isSubscribe FROM users WHERE 1 
AND (city = 'Boston' AND stateCode = '3fe5003edc0cb6c83962dbd74d35dd50' AND zipcode = '32564')
OR (accountType = 'O' 
OR helpMoreType = 'DI' 
OR helpMoreType = 'CO' 
OR helpMoreType = 'AD')
AND accountStatus = 'A' 
AND isSubscribe = 'Y' 
AND accountType != 'S'

但我无法理解这两个查询之间的区别是什么?有人能指出这两个问题吗?
谢谢您

ctehm74n

ctehm74n1#

OR 表达式不受括号的限制,这意味着满足以下条件之一的任何记录 OR 返回有效。
将它们绑定到括号内时,将创建一个条件,该条件依赖于多个可能的条件来满足该条件。
举个例子,如果你想到一些真实世界的物体:
“买水果和蔬菜”,定义为“香蕉” OR “一个苹果” OR “一个橘子” AND “一个洋葱”,意思是如果你购买了任何一种水果,你已经满足了条件,因为“一根香蕉”将评估为 True 然后移到下一排。
定义为“香蕉” OR “一个苹果” OR “橙子”) AND “一个洋葱”,意味着你可以购买三种水果中的任何一种,但也必须购买一个“洋葱”,以便评估条件 True .

相关问题