MSSQL 2019多表关联查询:合并多值为逗号分隔字段
MSSQL 2019 多表关联合并多行数据查询方案
正确查询语句
SELECT t.UUID, t.Body, t.[Desc], -- Desc是MSSQL保留关键字,需用方括号转义 -- 合并关联的Image值,逗号分隔 STRING_AGG(i.Image, ', ') AS Images, -- 合并关联的Doc值,逗号分隔 STRING_AGG(d.Doc, ', ') AS Docs FROM [text] t -- text是MSSQL保留关键字,需用方括号转义 LEFT JOIN content c_img ON t.UUID = c_img.UUID AND c_img.Type = 'image' LEFT JOIN [image] i ON c_img.CatUUID = i.UUID LEFT JOIN content c_doc ON t.UUID = c_doc.UUID AND c_doc.Type = 'doc' LEFT JOIN doc d ON c_doc.CatUUID = d.UUID GROUP BY t.UUID, t.Body, t.[Desc]
语句说明
- 针对
text、Desc这类MSSQL保留关键字,必须用方括号[]包裹,避免语法冲突 - 使用
STRING_AGG函数实现多行数据的逗号分隔合并(MSSQL 2017及以上版本原生支持) - 通过两次关联
content表,分别筛选类型为image和doc的关联记录,再对接对应的image、doc表 - 最后按
text表的唯一标识及需查询字段分组,完成多行数据的单行合并
原SQL问题说明
你之前的查询存在两处核心错误:
- JOIN语法不规范:
LEFT OUTER JOIN content.UUID on text.UUID写法不符合SQL关联规则,正确格式应为LEFT JOIN 表名 ON 关联条件 - 缺少多行合并逻辑:未使用聚合函数将多条关联的image/doc值合并为单行
内容的提问来源于stack exchange,提问作者UmaPhil
相关产品推荐
相关产品推荐

