工作中遇到了主表关联拓展表的字段,查询后在表单上将一个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