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
相关产品推荐
相关产品推荐

