SQL查询未给出预期结果

时间:2018-08-17 05:25:21

标签: php mysql sql

我使用此查询从具有这些条件的表中获取数据,但查询给了我意外的数据。这是我的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 个答案:

答案 0 :(得分:2)

如果OR表达式未限制在括号内,则表示符合OR分隔条件之一的任何记录都可以有效返回。

将它们绑定在括号内时,您将创建一个依赖于多个可能条件的单个条件来满足该条件。

作为一个例子,如果您考虑一些现实世界中的物体:

“买水果和蔬菜” ,定义为“香蕉” OR “苹果” { {1}} “橙子” OR “洋葱” ,表示如果您购买了任何水果,自“香蕉” 的值为AND,然后继续进行下一行。

定义为(“香蕉” True “一个苹果” OR “一个橘子” OR “洋葱” ,表示您可以购买三种水果中的任何一种,但必须还必须购买“洋葱” 以便条件评估为AND