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