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

SQL查询筛选LAB_ORD.Order_Status仅返回F、C不生效问题咨询

问题排查与解决方案

故障根因

问题出在SQL逻辑运算符的优先级规则:AND的运算优先级高于OR,你写的WHERE条件会被SQL引擎按如下逻辑解析执行:

WHERE 
    (Test_Code = '139901')
    OR (Test_Code LIKE '164073')
    OR (Test_Code LIKE '%sars%')
    OR (
        (Test_Code LIKE '%covid%')
        AND LAB_ORD.Order_Status IN ('F', 'C')
        AND (Result NOT LIKE '.')
    )

也就是说,只要记录满足前三个Test_Code判断中的任意一个,不管Order_Status是什么值,都会被查询返回,这就是你过滤规则不生效的原因。

修正方案

将所有Test_Code相关的判断用括号包裹为一个独立条件组,让整组条件和后续的Order_Status、Result过滤条件为AND关联关系,修正后的WHERE部分代码如下:

WHERE 
    (
        Test_Code = '139901'
        OR Test_Code LIKE '164073'
        OR Test_Code LIKE '%sars%'
        OR Test_Code LIKE '%covid%'
    )
    AND LAB_ORD.Order_Status IN ('F', 'C')
    AND Result NOT LIKE '.'

可选优化点

  • Test_Code LIKE '164073'没有通配符,和Test_Code = '164073'效果完全一致,可以直接换成等于判断提升执行效率
  • 所有关联表的字段建议带上表别名,避免多表同名字段导致的执行异常,比如Test_Code可以写成LT.Test_Code,Result可以写成LR.Result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:24:03