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

WHERE子句中CASE语句内检查相等性的SQL语法问题

解决SQL条件筛选的语法错误问题

你的问题出在CASE表达式的用法上——CASE返回的是具体值,不能直接返回UP.TransportStateID = @StatePickupID这种布尔判断,而且用参数和CASE结果做相等比较的逻辑也不对。以下是两种可行的修正方案:

方案1:使用AND/OR组合(直观易读)

直接判断参数是否为空,为空时该条件自动成立,不为空时再匹配字段值:

WHERE 1=1
    AND TU.Auction_I IN (41, 42)
    AND (@StatePickupID IS NULL OR UP.TransportStateID = @StatePickupID)
    AND (@StateDropoffID IS NULL OR UD.TransportStateID = @StateDropoffID)

方案2:调整CASE表达式逻辑

让CASE返回字段值,当参数为空时返回字段自身,确保无论参数是否为空,条件都能成立:

WHERE 1=1
    AND TU.Auction_I IN (41, 42)
    AND UP.TransportStateID = CASE 
        WHEN @StatePickupID IS NOT NULL THEN @StatePickupID 
        ELSE UP.TransportStateID 
    END
    AND UD.TransportStateID = CASE 
        WHEN @StateDropoffID IS NOT NULL THEN @StateDropoffID 
        ELSE UD.TransportStateID 
    END

两种方案都能实现你的需求:仅当参数不为空时,才要求对应字段和参数相等;参数为空时,该条件不做过滤。其中方案1的可读性更好,也更利于数据库优化器生成高效执行计划。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:25:47