如何在多个 Where 子句之间连接 MySQL
Posted
技术标签:
【中文标题】如何在多个 Where 子句之间连接 MySQL【英文标题】:How to MySQL Between Multiple Where Clause 【发布时间】: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 之间的产品
【问题讨论】:
【参考方案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。你可能记得在学校(我几乎不记得),乘法和除法在加法之前被评估 - 这里的概念相同。
最好的办法(为了代码的可读性和明确您的意图)是使用括号强制按照您希望的顺序对运算符进行评估。
【讨论】:
很好,你提到了这一点。这是问题的关键。以上是关于如何在多个 Where 子句之间连接 MySQL的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]
使用 MS Access 如何使用多个连接和 where 子句执行更新?