MSSQL中INNER JOIN如何添加Subgroup指定位置匹配Group的关联条件
解决方案
直接在原有INNER JOIN的关联条件中新增模式匹配规则即可,完整查询语句如下:
SELECT DISTINCT ID FROM TableA TA INNER JOIN TableB TB ON TA.Type = TB.Type AND TB.Subgroup LIKE 'XX-' + TA.[Group] + '-XX%'
说明
Group是MSSQL的保留关键字,引用该字段时必须用方括号[]包裹,否则会触发语法错误- LIKE匹配逻辑完全符合需求规则:
- 前缀
XX-固定匹配Subgroup中Group值的前置标识 - 拼接
TA.[Group]对应要匹配的Group字段内容 - 后缀
-XX%固定匹配Group值后的首个-XX标识,后续任意字符不影响匹配结果
- 前缀
- 如果存在
XX-不在Subgroup最开头的场景,可以用CHARINDEX+SUBSTRING实现通用位置校验:
AND SUBSTRING( TB.Subgroup, CHARINDEX('XX-', TB.Subgroup) + 3, -- 跳过XX-的3个字符,取目标子串起始位 CHARINDEX('-XX', TB.Subgroup, CHARINDEX('XX-', TB.Subgroup)) - (CHARINDEX('XX-', TB.Subgroup) + 3) -- 计算两个标识之间的长度 ) = TA.[Group]
该写法会自动跳过不存在XX-或后续无-XX的Subgroup记录,无需额外判空。
内容的提问来源于stack exchange,提问作者Thelonious Monk
相关产品推荐
相关产品推荐

