如何在多个 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 子句? [复制]

MySQL 在多个外部连接的子句中放置条件

使用 MS Access 如何使用多个连接和 where 子句执行更新?

mysql连接表并搜索where子句的最新记录

在 where 子句和 order by 子句之间的 MySQL 索引

mysql语句where条件中的是啥意思