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

SQL报表返回空值问题:Cust.Ref查询条件如何兼顾多场景筛选

解决方案

问题根因

SQL采用三值逻辑判断规则,NULL 参与 LIKE 比较时返回的结果既不是 TRUE 也不是 FALSE,而是 UNKNOWN,WHERE 子句仅会保留判断结果为 TRUE 的行:

  • 初始写法 WHERE Cust.Ref LIKE ? 下,当你不需要筛选客户参考号、给占位符传通配符 % 时,所有 Cust.Ref IS NULL 的行都会被过滤,导致Nominal Codes模块筛选结果缺失。
  • 优化后的写法 WHERE (Cust.Ref LIKE ? OR Cust.Ref IS NULL) 强制包含了所有NULL值行,无论你传入的筛选参数是什么,都会带出NULL值记录,不符合按客户参考号精确筛选的需求。

可选修复方案

方案1:参数判断法(兼容性最佳,适配所有SQL方言)

通过判断传入的占位符是否为全通配符 %(即不筛选客户参考号的场景),决定是否包含NULL值行:

WHERE 
  Cust.Ref LIKE ? 
  OR (? = '%' AND Cust.Ref IS NULL)

注意:该写法需要给两个?占位符传入完全相同的参数值。

效果验证

  • 不筛选客户参考号,传参为%:条件等价于 Cust.Ref LIKE '%' OR Cust.Ref IS NULL,所有行都符合条件,Nominal Codes筛选正常返回34条结果。
  • 按客户参考号筛选,传参为例如A%:后半段条件'A%' = '%'不成立,仅返回Cust.Ref符合A%规则的非NULL记录,不会带出多余的NULL值行。

方案2:空值替换法(仅需传一次参数)

如果你的业务逻辑中Cust.Ref不会存储空字符串,可使用COALESCE将NULL值替换为空字符串后再做匹配:

WHERE COALESCE(Cust.Ref, '') LIKE ?

效果验证

  • 不筛选客户参考号,传参为%:空字符串匹配%,NULL值行会被正常包含。
  • 按客户参考号筛选,传参为非全通配的筛选值:空字符串无法匹配例如A%的规则,NULL值行会被自动过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 22:51:01