MySQL在查询的WHERE子句中使用“链式不平等”语法时不会抱怨,但是产生的结果与使用正确语法编写的具有类似精神的查询不同。那么,它实际上在运行什么查询,应用了哪些约束呢?为什么它不产生一个错误?
一个简单的例子:假设我在MySQL数据库中有一个表,一个名为User的表,其属性为score。
我可以用链式不等式语法编写以下表单的查询:
SELECT *
FROM User
WHERE 10 < score < 15;和具有正确语法的下列表单的查询:
SELECT *
FROM User
WHERE score > 10 AND score < 15;结果不一样。
请重复上述问题:
发布于 2016-10-24 14:21:52
根据文档
对于表达式中相同优先级级别的运算符,计算从左到右进行,但赋值计算从右到左是例外。
MySQL将将其评估为:
WHERE (10 < score) < 15由于MySQL在数字上下文中将布尔值视为数字,因此括号大小的部分将转换为0或1(如果score为NULL,则为NULL ),以便进行后续比较。所以,结果总是正确的。
我相信这既解释了为什么MySQL不会产生错误,也解释了为什么您得到的结果与您所期望的不同。
使用AND有不同的选项,但这将是典型的:
WHERE score > 10 AND score < 15https://stackoverflow.com/questions/40220794
复制相似问题