【问题标题】:How to MySQL Between Multiple Where Clause如何在多个 Where 子句之间连接 MySQL
【发布时间】:2020-05-09 15:11:28
【问题描述】:

我想显示价格在 10k 到 30k 之间且 category_id = 1 或 category_id = 2 的产品。

这是我的查询

SELECT * FROM products
WHERE price BETWEEN 10000 AND 30000
AND
category_id = '2' OR category_id = '3'
ORDER BY name ASC, price ASC

但是我得到了这些类别的所有产品,但没有得到价格在 10k 到 30k 之间的产品

【问题讨论】:

    标签: mysql where-clause between


    【解决方案1】:

    用适当的括号强制执行逻辑

    SELECT * FROM products
    WHERE price BETWEEN 10000 AND 30000
    AND
    (category_id = '2' OR category_id = '3')
    ORDER BY name ASC, price ASC
    

    【讨论】:

      【解决方案2】:

      您的OR 谓词需要在括号之间:

      SELECT * FROM products
      WHERE price BETWEEN 10000 AND 30000
      AND (category_id = '1' OR category_id = '2')
      ORDER BY name ASC, price ASC
      

      或者,您可以使用IN

      SELECT * FROM products
      WHERE price BETWEEN 10000 AND 30000
      AND category_id IN ('1', '2')
      ORDER BY name ASC, price ASC
      

      【讨论】:

        【解决方案3】:

        你还需要考虑你对这个的操作顺序,你想要这个

        WHERE (price BETWEEN 10000 AND 30000)
        AND
        (category_id = '2' OR category_id = '3')
        

        【讨论】:

          【解决方案4】:

          要了解为什么会发生这种情况,您需要了解operator precedence。你可能记得在学校(我几乎不记得),乘法和除法在加法之前被评估 - 这里的概念相同。

          最好的办法(为了代码的可读性和明确您的意图)是使用括号强制按照您希望的顺序对运算符进行评估。

          【讨论】:

          • 很好,你提到了这一点。这是问题的关键。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-08
          相关资源
          最近更新 更多