基本用法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
常常用于关联查询,并且表数据对应关系为一对多,将结果返回一条数据
业务场景中将项目阶段与结束时间对应查询出来(项目阶段有多个,一阶段对应一阶段的结束时间,依次)
1 //mapper里的sql写法 2 SELECT 3 p.*, 4 (SELECT group_concat(d.planStage,':',d.endDateTrue SEPARATOR ';') FROM pm_plan_detail d WHERE p.id = d.strProId) as 'dId' 5 FROM pm_project p 6 left join pm_plan_detail c on p.id = c.strProId 7 ORDER BY p.CREATEDATETIME DESC
将项目阶段与结束时间拼接成一个字段dId,内容为"4:2019-11-20;2:2019-09-24;7:2020-01-09;6:2019-12-30;3:2019-10-23",在业务代码中将dId转成map
注意!当下述sql中的d.endDateTrue或者d.enDate其中一个为null时,则返回的dId为null,为了避免这种情况,可以使用IFNULL来判断:
1 SELECT 2 p.id, 3 p.strProjectName, 4 (SELECT group_concat(d.planStage ,':',IFNULL(d.endDate,' '),',',IFNULL(d.endDateTrue,' ') SEPARATOR ';') FROM pm_plan_detail d WHERE p.id = d.strProId) as 'dId' 5 FROM pm_project p