子句之间的多个MySql WHERE

时间:2011-03-11 02:35:48

标签: mysqli-multi-query

Newbie MySql程序员感谢您的耐心等待。

我试图在满足3个不同条件的表中跟踪Id编号,这是我得到的,但是查询剂量返回表中有明显匹配的任何结果。想法?

SELECT *
FROM `table`
WHERE `x` BETWEEN 80 AND 20
AND `y` BETWEEN 120 AND 20
AND `z` BETWEEN 40 AND 10
LIMIT 0 , 30

理论上我认为这应该有用吗?

3 个答案:

答案 0 :(得分:7)

关闭,但没有雪茄。 :)

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个月后清楚。 / p>

答案 1 :(得分:2)

SELECT * FROM table WHERE 
      (x BETWEEN 20 AND 80) AND 
      (y BETWEEN 20 AND 120) AND 
      (z BETWEEN 10 AND 40) 
LIMIT 0 , 30

答案 2 :(得分:1)

我认为范围需要相反:

SELECT * FROM table WHERE x BETWEEN 20 AND 80 AND y BETWEEN 20 AND 120 AND z BETWEEN 10 AND 40 LIMIT 0 , 30