我使用这个查询从表中获取这些条件下的数据,但查询给我意外的数据。这是我的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'
但我无法理解这两个查询之间的区别是什么?有人能指出这两个问题吗?
谢谢您
1条答案
按热度按时间ctehm74n1#
当
OR
表达式不受括号的限制,这意味着满足以下条件之一的任何记录OR
返回有效。将它们绑定到括号内时,将创建一个条件,该条件依赖于多个可能的条件来满足该条件。
举个例子,如果你想到一些真实世界的物体:
“买水果和蔬菜”,定义为“香蕉”
OR
“一个苹果”OR
“一个橘子”AND
“一个洋葱”,意思是如果你购买了任何一种水果,你已经满足了条件,因为“一根香蕉”将评估为True
然后移到下一排。定义为“香蕉”
OR
“一个苹果”OR
“橙子”)AND
“一个洋葱”,意味着你可以购买三种水果中的任何一种,但也必须购买一个“洋葱”,以便评估条件True
.