我使用此查询从具有这些条件的表中获取数据,但查询给了我意外的数据。这是我的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'
但是我无法理解两个查询之间的区别是什么?谁能指出这两个查询?
谢谢
答案 0 :(得分:2)
如果OR
表达式未限制在括号内,则表示符合OR
分隔条件之一的任何记录都可以有效返回。
将它们绑定在括号内时,您将创建一个依赖于多个可能条件的单个条件来满足该条件。
作为一个例子,如果您考虑一些现实世界中的物体:
“买水果和蔬菜” ,定义为“香蕉” OR
“苹果” { {1}} “橙子” OR
“洋葱” ,表示如果您购买了任何水果,自“香蕉” 的值为AND
,然后继续进行下一行。
定义为(“香蕉” True
“一个苹果” OR
“一个橘子” )OR
“洋葱” ,表示您可以购买三种水果中的任何一种,但必须还必须购买“洋葱” 以便条件评估为AND
。