新手 MySql 程序员感谢您的耐心。
我试图在满足 3 个不同条件的表中跟踪 ID 号,这就是 Iv 得到的结果,但是查询会返回表中明显匹配的任何结果。想法?
SELECT *
FROM `table`
WHERE `x` BETWEEN 80 AND 20
AND `y` BETWEEN 120 AND 20
AND `z` BETWEEN 40 AND 10
LIMIT 0 , 30
我在理论上认为这应该有效吗?
新手 MySql 程序员感谢您的耐心。
我试图在满足 3 个不同条件的表中跟踪 ID 号,这就是 Iv 得到的结果,但是查询会返回表中明显匹配的任何结果。想法?
SELECT *
FROM `table`
WHERE `x` BETWEEN 80 AND 20
AND `y` BETWEEN 120 AND 20
AND `z` BETWEEN 40 AND 10
LIMIT 0 , 30
我在理论上认为这应该有效吗?
关闭,但没有雪茄。:)
SELECT * FROM table
WHERE (x BETWEEN 20 AND 80) AND
(y BETWEEN 20 AND 120) AND
(z BETWEEN 10 AND 40) LIMIT 0 , 30
解释一下,SQL 服务器的评估通常x BETWEEN val1 AND val2
与x >= val1 AND x <= val2
. 原始查询的编写方式是,第一个条件是x >= 120 AND x <= 20)
,这显然不是您想要的。
不同条件周围的括号确保在考虑 AND 之前对每个条件进行完全评估。它在 SQL 中的大部分时间都会产生影响,即使不是这样,使用它们也是一个好主意,这样在 6 个月后,当您(或其他人)必须再次查看查询时,您的意图就很清楚了。
SELECT * FROM table WHERE
(x BETWEEN 20 AND 80) AND
(y BETWEEN 20 AND 120) AND
(z BETWEEN 10 AND 40)
LIMIT 0 , 30
我认为范围需要反过来:
SELECT * FROM table WHERE x BETWEEN 20 AND 80 AND y BETWEEN 20 AND 120 AND z BETWEEN 10 AND 40 LIMIT 0 , 30