SQL语句返回非预期重复结果:PRRF批发价与PK01零售价匹配逻辑异常
SQL查询返回多余价目表记录问题修复方案
问题根因
需求明确要求零售价目表与批发价目表首字母一致,仅可为首字母M或S开头,但现有SQL仅对零售价目表做了M/S开头的限制,未添加零售价目表与对应批发价目表首字母一致的关联条件,导致S开头的批发价目表同时匹配到了M开头和S开头的两个零售价目表,出现多余记录。
修复方案
在零售价目表对应表t3的LEFT JOIN关联条件中,新增首字母匹配规则即可。
你当前使用的LIKE '[M,S]%'为SQL Server支持的通配符语法,修改后的t3关联逻辑如下:
left join cugex1 t3 on t3.cono = odhead.cono and t3.pk01 LIKE '[M,S]%' and LEFT(t1.prrf, 1) = LEFT(t3.pk01, 1) -- 新增首字母匹配条件 and t3.a130 = t1.proj and t3.pk02 = odhead.cucd and t3.a030 <> 'WHOLESALE'
若使用MySQL、PostgreSQL等不支持[]通配符的数据库,需同步调整首字母校验逻辑,以MySQL为例:
left join cugex1 t3 on t3.cono = odhead.cono and (t3.pk01 LIKE 'M%' OR t3.pk01 LIKE 'S%') -- 适配非SQL Server数据库的M/S开头校验 and LEFT(t1.prrf, 1) = LEFT(t3.pk01, 1) -- 新增首字母匹配条件 and t3.a130 = t1.proj and t3.pk02 = odhead.cucd and t3.a030 <> 'WHOLESALE'
修改后查询结果将仅返回批发价、零售价首字母一致的记录,符合预期。
内容的提问来源于stack exchange,提问作者Paul Kalathas
相关产品推荐
相关产品推荐

