一对多时,如何将userId相同的多条关联表数据合并为一条
短信预约 -IT技能 免费直播动态提醒
工作中遇到了主表关联拓展表的字段,查询后在表单上将一个userId关联到的多条拓展表数据合并为一行展示的场景,在这里记录一下解决方法。
1.PGSQL的方法
业务场景:存在3个表(人员表,人员属性关联表,属性字段拓展表),一个人员可以有多个属性,需要在列表上将人员的信息和属性类型展示在一行,如图2。
图1
图2
这里由于涉及分页展示,所以人员表不便于和人员属性关联表直接left join,但是这里可以先把人员id相同的关联表数据合并为一条,然后将这些合并后的数据作为临时表和人员表left join
这样就避免了分页时条数会因为在内存中合并同userId的数据行而减少的问题,合并中间表的数据作为临时表的SQL大致如下。
select id,string_agg(type,',') from relation group by id;
参考博客:
string_agg函数
2.MYSQL的方法
MySql中没有string_agg聚合函数,但是可以使用group_concat解决这个问题。
创建demo表
添加演示数据
示例SQL
SELECT id,GROUP_CONCAT(description) as des from user_demo GROUP BY id
结果
参考博客:
来源地址:https://blog.csdn.net/qq_41659869/article/details/127620396
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341