You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多WHERE子句中BETWEEN使用错误:价格筛选失效问题

问题分析与解决方法

嘿,我一眼就瞅出问题所在啦——这是SQL逻辑运算符优先级在搞鬼!

原查询的问题

SQL里AND的优先级比OR高,所以你写的这条语句:

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

实际执行逻辑是:

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

这就导致所有category_id为3的产品不管价格多少都被返回了,完全没受价格区间的限制;另外你原本需求是筛选category_id为1或2的产品,原查询里写成了2或3,这也是个小失误哦。

两种正确的写法

方法1:用括号强制改变运算顺序

把分类的OR条件用括号括起来,确保价格区间筛选同时作用于两个分类:

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

方法2:用IN简化分类条件

用IN来替代多个OR,语句更简洁易读:

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

这样就能精准筛选出价格在10k-30k之间,且category_id为1或2的产品啦!

内容的提问来源于stack exchange,提问作者May Tin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:07:50