Mysql查询使用where子句返回错误数据
我使用下面的查询从mysql数据库获取数据,但得到的数据错误。我想获取所有Mysql查询使用where子句返回错误数据,mysql,sql,Mysql,Sql,我使用下面的查询从mysql数据库获取数据,但得到的数据错误。我想获取所有cart\u Status为2或3且view\u Status为1的数据: SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3 以下是我的数据结构和表的外观: 但结果是,它返回的内容与不是我的目标的view\u Status=1无关 它返回: 当然,它不应该返回任何内容!但是,的确如此这是关于运算符
cart\u Status
为2或3且view\u Status
为1的数据:
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3
以下是我的数据结构和表的外观:
但结果是,它返回的内容与不是我的目标的view\u Status=1
无关
它返回:
当然,它不应该返回任何内容!但是,的确如此这是关于运算符优先级的问题。
您的查询的计算结果为
SELECT * FROM `cart` WHERE (`view_Status` = 1 AND cart_Status = 2) OR `cart_Status` = 3
您应该添加括号:
SELECT * FROM `cart` WHERE `view_Status` = 1 AND (cart_Status = 2 OR `cart_Status` = 3)
您似乎正在学习SQL。在
WHERE
子句中使用括号,尤其是在混合使用和以及或时
但是,在您的情况下,
中的是一个更好的解决方案:
SELECT c.*
FROM `cart` c
WHERE c.view_Status = 1 AND cart_Status IN (2, 3);
这是运算符优先级的问题。在编程语言中,和
通常在或
之前执行(将和
看作是位的乘法,而将或
看作是位的加法和优先级变得熟悉)。那么,你的情况是:
`view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3
解析如下:
(`view_Status` = 1 AND cart_Status = 2) OR `cart_Status` = 3
这将导致选择具有特定购物车状态的所有行。必须在第二个子句周围添加括号:
`view_Status` = 1 AND (cart_Status = 2 OR `cart_Status` = 3)
或者更简短地说:
`view_Status` = 1 AND cart_Status IN (2, 3)
或者更好
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status in (2, 3);
尝试此SELECT*FROM
cart`WHEREview\u Status
=1和(cart\u Status=2或cart\u Status
=3)`Oops!我忘了。谢谢:-)在任何编程语言中称为运算符先行。
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status in (2, 3);