【问题标题】:Multiple MySql WHERE Between Clauses子句之间的多个 MySql WHERE
【发布时间】:2011-03-11 02:35:47
【问题描述】:

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

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

【问题讨论】:

  • 它可能不是绝对必要的,但请添加括号以区分不同的AND并提高可读性。

标签: mysqli-multi-query


【解决方案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

为了解释,SQL 服务器通常评估 x BETWEEN val1 AND val2x >= val1 AND x <= val2 相同。按照您原始查询的编写方式,第一个条件是 x >= 120 AND x <= 20),这显然不是您想要的。

不同条件周围的括号确保在考虑 AND 之前对每个条件都进行了完整的评估。它在 SQL 中的大部分时间都会产生影响,即使不是这样,使用它们也是一个好主意,这样在 6 个月后,当您(或其他人)必须再次查看查询时,您的意图就很清楚了。

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      我认为范围需要反过来:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-02
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        • 2016-11-18
        相关资源
        最近更新 更多