Mysql 查询 returns 带有 where 子句的错误数据
Mysql query returns wrong data with where clause
我正在使用以下查询从 mysql 数据库获取数据,但我得到了错误的数据。我想获取 cart_Status
为 2 或 3 且 view_Status
为 1:
的所有数据
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3
这是我的数据结构和 table 的样子:
但结果,return不管 view_Status = 1
不是我的目标。
它 returns :
当然应该不会return什么的!但是,确实如此!
这是关于运算符优先级的。
您的查询评估为
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
子句中使用括号,尤其是当您混合使用 AND
和 OR
.
时
但是,对于您的情况,IN
是更好的解决方案:
SELECT c.*
FROM `cart` c
WHERE c.view_Status = 1 AND cart_Status IN (2, 3);
这是运算符优先级的问题。在编程语言中,通常 AND
在 OR
之前执行(将 AND
视为位的乘法,将 OR
视为位的加法,并且优先级变得很熟悉)。所以,你的情况:
`view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3
解析如下:
(`view_Status` = 1 AND cart_Status = 2) OR `cart_Status` = 3
这会导致选择具有特定 cart_Status
的所有行。您必须在第二个子句周围添加括号:
`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 = 2 OR `cart_Status` = 3)
或更好
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status in (2, 3);
我正在使用以下查询从 mysql 数据库获取数据,但我得到了错误的数据。我想获取 cart_Status
为 2 或 3 且 view_Status
为 1:
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3
这是我的数据结构和 table 的样子:
但结果,return不管 view_Status = 1
不是我的目标。
它 returns :
当然应该不会return什么的!但是,确实如此!
这是关于运算符优先级的。
您的查询评估为
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
子句中使用括号,尤其是当您混合使用 AND
和 OR
.
但是,对于您的情况,IN
是更好的解决方案:
SELECT c.*
FROM `cart` c
WHERE c.view_Status = 1 AND cart_Status IN (2, 3);
这是运算符优先级的问题。在编程语言中,通常 AND
在 OR
之前执行(将 AND
视为位的乘法,将 OR
视为位的加法,并且优先级变得很熟悉)。所以,你的情况:
`view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3
解析如下:
(`view_Status` = 1 AND cart_Status = 2) OR `cart_Status` = 3
这会导致选择具有特定 cart_Status
的所有行。您必须在第二个子句周围添加括号:
`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 = 2 OR `cart_Status` = 3)
或更好
SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status in (2, 3);