SQL中group_concat用法

基本用法: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

 

posted @ 2020-03-23 11:07  leviH  阅读(3610)  评论(0编辑  收藏  举报