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

如何编写含string_split的SQL查询匹配MCode并输出LegID与CarriCode

修正SQL查询:输出匹配EFTest表MCode的LegID与CarriCode

问题核心

需要从业务表中筛选出拆分后的MCode至少有一个存在于dbo.EFTest表的记录,输出对应的LegID和CarriCode,预期结果为LegID 1(CarriCode AB)、LegID 3(CarriCode AD)。

修正后的SQL查询

假设业务表名为LegCarrier(若实际表名不同,替换为对应名称),字段包含LegID、CarriCode、MCode(逗号分隔的MCode字符串),修正后的查询如下:

SELECT DISTINCT l.LegID, l.CarriCode
FROM LegCarrier l
CROSS APPLY STRING_SPLIT(l.MCode, ',') AS split_mc
JOIN dbo.EFTest e ON TRIM(split_mc.value) = e.MCode

关键逻辑说明

  1. 拆分MCode字符串:使用CROSS APPLY STRING_SPLIT()将每条记录中逗号分隔的MCode拆分为独立行,实现逐个校验的需求。
  2. 处理空格问题:用TRIM()去除拆分后MCode值的首尾空格,避免因字符串格式问题导致匹配失败。
  3. 关联匹配校验:将拆分后的MCode与dbo.EFTest表的MCode做等值关联,筛选出存在匹配的记录。
  4. 去重处理:通过DISTINCT确保同一个LegID不会因多个匹配的MCode而重复输出。

原查询常见问题排查

如果原查询未得到正确结果,大概率是以下原因:

  • 未使用CROSS APPLY实现拆分后的行级关联,而是直接用字符串包含判断(如CHARINDEX),可能导致误匹配或漏匹配。
  • 未处理拆分后MCode的空格,导致与EFTest表的MCode无法等值匹配。
  • 未添加DISTINCT,出现重复输出的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:02:18