如何用INNER JOIN关联带不同前缀的同业务ITEMNMBR字段?
解决跨表关联时的前缀匹配问题
嘿,我来帮你搞定这个关联匹配的问题!你遇到的核心问题很明确:NSR数据库里的ITEMNMBR带固定的NSR-前缀,而ART库的同名字段没有前缀,导致直接用=关联时匹配不上。咱们只需要对A表的字段做个简单的字符串处理,就能让两个字段的业务实体部分对齐,实现正确的INNER JOIN。
两种实用的解决方案
根据你使用的SQL环境,这里提供两种常用的实现方式:
方式1:用REPLACE直接移除前缀
如果NSR-是所有目标字段都带的固定前缀,用REPLACE函数最直观:
SELECT TOP 50 A.ITEMNMBR AS 'Item Number', A.QTYONHND AS 'Quantity On Hand' FROM [NSR].dbo.[IV00102] A INNER JOIN [ART].dbo.[IV00101] B ON REPLACE(A.ITEMNMBR, 'NSR-', '') = B.ITEMNMBR ORDER BY A.ITEMNMBR
方式2:用SUBSTRING截取有效部分
如果前缀的长度是固定的(比如NSR-刚好是4个字符),用SUBSTRING截取前缀之后的内容,效率会更高:
SELECT TOP 50 A.ITEMNMBR AS 'Item Number', A.QTYONHND AS 'Quantity On Hand' FROM [NSR].dbo.[IV00102] A INNER JOIN [ART].dbo.[IV00101] B ON SUBSTRING(A.ITEMNMBR, 5, LEN(A.ITEMNMBR)) = B.ITEMNMBR ORDER BY A.ITEMNMBR
额外的小提示
- 要是
A表中存在少数不带NSR-前缀的字段,可以加个判断避免匹配错误:ON CASE WHEN A.ITEMNMBR LIKE 'NSR-%' THEN REPLACE(A.ITEMNMBR, 'NSR-', '') ELSE A.ITEMNMBR END = B.ITEMNMBR - 为了让关联查询更快,建议给
ART.dbo.IV00101的ITEMNMBR字段建个索引;如果这类查询很频繁,也可以考虑在NSR.dbo.IV00102上新增一个计算列(存储去掉前缀后的内容)并建索引,进一步提升性能。
内容的提问来源于stack exchange,提问作者Standley St Eloy
相关产品推荐
相关产品推荐

