MS SQL Server两表按code关联后计算两列字符串值差集
MS SQL Server 2019 分号分隔字段差集查询方案
实现逻辑
- 利用SQL Server 2019原生支持的
STRING_SPLIT函数,将test2表中按分号存储的多名称字段拆分为单条名称记录 - 通过code字段关联test3表,过滤掉和test3.name1后缀匹配的名称条目
- 用
STRING_AGG将剩余未匹配的名称重新按分号拼接,排除无剩余差集的记录
可直接运行的SQL代码
WITH split_names AS ( SELECT t2.id, t2.code, TRIM(s.value) AS single_name FROM test2 t2 CROSS APPLY STRING_SPLIT(t2.all_names, ';') s ), get_diff AS ( SELECT sn.id, sn.single_name FROM split_names sn LEFT JOIN test3 t3 ON sn.code = t3.code AND sn.single_name LIKE '%' + t3.name1 WHERE t3.code IS NULL ) SELECT id AS Id, STRING_AGG(single_name, ';') AS Diff_of_name FROM get_diff GROUP BY id ORDER BY id;
运行结果
执行上述代码后将得到和需求完全一致的输出:
| Id | Diff_of_name |
|---|---|
| A01 | 12A2S0403-Buffalo;13A2C0304-Miami |
| A03 | 12A1M0208-Manhattan |
说明:id为A02的记录所有名称均和test3匹配,无差集内容,不会出现在最终结果中。
内容的提问来源于stack exchange,提问作者Arty155
相关产品推荐
相关产品推荐

