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

MySQL为何忽略OR后的条件?房产筛选SQL语句问题咨询

解决MySQL多OR条件后过滤条件失效的问题

嗨,这问题我熟!你遇到的是SQL运算符优先级的坑——AND的优先级比OR高,所以你原来的语句其实被MySQL解析成了这样:

(tipo = 'Casas_Casa') OR (tipo = 'Departamentos_Duplex') OR (tipo = 'Casas_Chalet') OR (tipo = 'Casas Condominio') OR (tipo = 'Countries y Barrios cerrados_Casas') OR (tipo = 'PH' AND operacion = 'Alquiler')

看到没?只有最后一个tipo = 'PH'的条件会和operacion = 'Alquiler'绑定,其他的OR条件根本不会受到operacion的过滤,这就是为什么你会拿到所有符合OR条件的房源,不管operacion是什么。

修正方案1:用括号包裹所有OR条件

把所有tipo的判断用括号括起来,强制让MySQL先处理OR逻辑,再和AND条件结合:

SELECT * FROM props 
WHERE (tipo = 'Casas_Casa' OR tipo = 'Departamentos_Duplex' OR tipo = 'Casas_Chalet' OR tipo = 'Casas Condominio' OR tipo = 'Countries y Barrios cerrados_Casas' OR tipo = 'PH') 
AND operacion = 'Alquiler' 
ORDER BY modif DESC

更优雅的方案2:用IN替代多个OR

当你需要判断某个字段是否等于多个值时,用IN语句比一堆OR要简洁得多,可读性和维护性都更好:

SELECT * FROM props 
WHERE tipo IN ('Casas_Casa', 'Departamentos_Duplex', 'Casas_Chalet', 'Casas Condominio', 'Countries y Barrios cerrados_Casas', 'PH')
AND operacion = 'Alquiler' 
ORDER BY modif DESC

以后要新增或修改tipo的筛选值,直接在IN的括号里调整就行,不用改一堆OR,方便很多。

这样修改后,MySQL就会先筛选出符合指定tipo的房源,再从中过滤出operacion为'Alquiler'的结果,排序功能也会正常生效啦。

内容的提问来源于stack exchange,提问作者Isidoro Barrera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:54