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

SQL查询结果异常排查:PL分类52105及指定交易码筛选无效问题

SQL筛选结果不符合预期的原因分析

问题根源:逻辑运算符优先级与括号缺失

原SQL的WHERE子句因AND优先级高于OR,实际执行逻辑和需求完全不符:
数据库会把原WHERE解析为:

WHERE (PL_CATEGORY_CATEG_STMT IN ('52105')) 
OR (PL_CATEGORY_CATEG_STMT IS NULL AND TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE 'R')

这意味着只要PL_CATEGORY_CATEG_STMT是'52105',不管TRANSACTION_CODE_STMT是什么值,都会被纳入结果集——这就是你看到其他交易码的直接原因。

而你的真实需求是:PL_CATEGORY_CATEG_STMT为'52105',同时满足交易码是'9007'/'9803'且反转标记不为'R',必须明确逻辑分组,避免优先级干扰。

修正后的SQL

如果仅按你描述的需求筛选,修正后代码如下:

FROM [Steward].[dbo].[vwNONFUNDED_RECOMP_04] 
WHERE PL_CATEGORY_CATEG_STMT IN ('52105') 
AND TRANSACTION_CODE_STMT IN ('9007', '9803') 
AND REVERSAL_MARKER_STMT NOT LIKE 'R'
ORDER BY BOOKING_DATE_STMT

如果原SQL里的PL_CATEGORY_CATEG_STMT IS NULL也是你需要的筛选条件,需用括号明确分组逻辑:

FROM [Steward].[dbo].[vwNONFUNDED_RECOMP_04] 
WHERE (PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL)
AND TRANSACTION_CODE_STMT IN ('9007', '9803') 
AND REVERSAL_MARKER_STMT NOT LIKE 'R'
ORDER BY BOOKING_DATE_STMT

内容的提问来源于stack exchange,提问作者Jimrosy P Madzokere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:14:57