Mysql查询使用where子句返回错误数据

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无关 它返回: 当然,它不应该返回任何内容!但是,的确如此这是关于运算符

我使用下面的查询从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
无关

它返回:


当然,它不应该返回任何内容!但是,的确如此

这是关于运算符优先级的问题。
您的查询的计算结果为

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`WHERE
view\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);