MySQL使用GROUP_CONCAT合并多列实现每行重复对象关联汇总
对象重复项汇总查询解决方案
表结构说明
Objects表(存储主对象)
`obj` A1 A1a A1b A2
Duplicates表(存储主对象与重复对象的关联关系)
注:primary是SQL保留字,实际测试中使用primaryy替代
`primary`, `secondary` A1, A1a A1, A1b
查询需求
编写单条SQL语句,利用GROUP_CONCAT函数返回每个对象及其重复项的汇总结果,每行对应一个对象,输出格式为[obj, primary, 合并后的secondary列],预期结果如下:
A1, A1,(A1a,A1b) A1a, A1,(A1a,A1b) A1b, A1,(A1a,A1b) A2, NULL
尝试过程与解决
初始查询问题
最初编写的SQL语句:
SELECT `obj`, `primary`, GROUP_CONCAT(`secondary`) FROM `Objects` LEFT JOIN `Duplicates` on (`obj`=`primary` OR `obj`=`secondary`)
执行后仅返回一行,所有secondary字段的内容被无差别拼接:
a1a,a1a, a1b,a1b,a1c,a1c,a2b,a2b
优化后查询
经建议添加GROUP BY子句,调整后的SQL语句:
SELECT `obj`, `primary`, GROUP_CONCAT(`secondary`) FROM `Objects` LEFT JOIN `Duplicates` on (`obj`=`primary` OR `obj`=`secondary`) GROUP BY `obj`
执行后得到结果:
obj primary GROUP_CONCAT(`secondary`) A1 A1 A1a,A1b A1a A1 A1a A1b A1 A1b A2 NULL NULL
后续确认该结果符合需求,问题已解决。
内容的提问来源于stack exchange,提问作者toby
相关产品推荐
相关产品推荐

