SQL查询WHERE条件不生效,如何调整以获取tbl_property表的正确数据
问题原因
SQL 逻辑运算符中 AND 的优先级高于 OR,你写的原始语句实际执行的判断逻辑等价于:
SELECT * FROM `tbl_property` WHERE `sublocality` LIKE '%dwarka%' OR `sublocality` LIKE '%delhi%' OR `property_type` LIKE '%1%' OR ( `property_type` LIKE '%2%' AND `status` = 1 AND `property_category` = 1 )
也就是说只要sublocality匹配dwarka/delhi、或者property_type匹配1的记录,不管status和property_category的值是什么,都会被查询出来,这就是你筛选条件不生效的核心原因。
修正方案
把所有OR连接的匹配条件用括号包裹为一个整体,再和后面的两个固定筛选条件做逻辑与即可:
SELECT * FROM `tbl_property` WHERE ( `sublocality` LIKE '%dwarka%' OR `sublocality` LIKE '%delhi%' OR `property_type` LIKE '%1%' OR `property_type` LIKE '%2%' ) AND `status` = 1 AND `property_category` = 1
可选优化建议
- 如果
property_type是数值类型的字段,不需要用LIKE模糊匹配,直接用property_type IN (1,2)即可,查询效率更高,逻辑也更清晰 - 如果
sublocality的模糊匹配使用频率很高,可以考虑给该字段加前缀索引或者使用全文索引,优化大表下的查询性能
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

