如何在SQL WHERE子句中根据输入参数实现条件过滤?
解决SQL WHERE子句的条件判断问题
你的原代码逻辑存在问题:当前写法会导致无论传入的参数是什么,只要reg_number='13352'就会被查询出来,这不符合你“仅当参数不是'22162'时才过滤reg_number='13352'”的需求。
正确的实现方式
可以通过两种简洁的方式实现你的需求:
方式一:使用AND/OR组合条件
直接根据传入参数的值分支判断:
SELECT * FROM car_details WHERE -- 当参数为'22162'时,匹配reg_number和mdate ( ? = '22162' AND reg_number = '22162' AND mdate = '2023-10-20' ) OR -- 当参数不为'22162'时,仅匹配reg_number='13352' ( ? != '22162' AND reg_number = '13352' )
注意:如果你的数据库不支持
!=,可以替换为<>。
方式二:使用CASE表达式
用CASE统一处理reg_number的匹配规则,再附加mdate的条件:
SELECT * FROM car_details WHERE reg_number = CASE WHEN ? = '22162' THEN '22162' ELSE '13352' END AND -- 仅当参数为'22162'时,才需要验证mdate ( ? != '22162' OR mdate = '2023-10-20' )
逻辑说明
两种方式的核心都是根据传入参数的值,动态切换过滤规则:
- 当参数是'22162'时,必须同时满足
reg_number='22162'和mdate='2023-10-20' - 当参数不是'22162'时,仅需要满足
reg_number='13352'
内容的提问来源于stack exchange,提问作者adss4
相关产品推荐
相关产品推荐

