天天看點

mysql一對多查詢_MYSQL 單表一對多查詢,将多條記錄合并成一條記錄

一、描述:

在MySQL 5.6環境下,應工作需求:将一個表中多條某個相同字段的其他字段合并(不太會表達,有點繞,直接上圖)

mysql一對多查詢_MYSQL 單表一對多查詢,将多條記錄合并成一條記錄

想要達到的效果:

mysql一對多查詢_MYSQL 單表一對多查詢,将多條記錄合并成一條記錄

實作SQL語句:

1 SELECT

2 a.books,3 GROUP_CONCAT(a.name SEPARATOR '||') ASNAMES,4 GROUP_CONCAT(a.code SEPARATOR '||') AScodes5 FROM

6 temp_info a7 GROUP BY a.books ;

二、關鍵詞 GROUP_CONCAT():(傳回一個字元串結果,該結果由分組中的值連接配接組合而成。)

文法結構:

1 GROUP_CONCAT(2 [DISTINCT] expr [,3 expr...] [

4 ORDER BY { unsigned_integer | col_name | formula } [ ASC | DESC] [,5 col...] ] [SEPARATOR str_val]

6 )

要點:

1、通過使用 DISTINCT 可以排除重複值。

2、如果希望對結果中的值進行排序,可以使用 ORDER BY 子句。

3、SEPARATOR: 一個字元串值,它被用于插入到結果值中。預設為一個逗号 (","),可以通過指定 SEPARATOR "" 完全地移除這個分隔符。

4、group_concat_max_len:可以設定一個最大的長度。

文法: 1 SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;

5、如果最大長度被設定,結果值未到達到該長度,則結果值會被增加到這個長度。

6、如果分組的字元過長,可以對系統參數進行設定:SET @@global.group_concat_max_len=40000;

注意:

group_concat_max_len在MySQL的配置檔案中是有預設值的!最大值為1024,如果要想該函數按需求設定長度,使用:

1 SET GLOBAL group_concat_max_len=-1;

檢視group_concat_max_len最大長度:

1 show variables like 'group_concat_max_len';

三、使用執行個體:

mysql一對多查詢_MYSQL 單表一對多查詢,将多條記錄合并成一條記錄

1 SELECT

2 a.books,3 GROUP_CONCAT(DISTINCT a.name SEPARATOR '||') ASNAMES, -- 使用 distinct 去除重複資料、4 GROUP_CONCAT(a.code ORDER BY a.code DESC SEPARATOR '||') AScodes -- 使用order by 對資料進行排序5 FROM

6 temp_info a7 GROUP BY a.books ;

mysql一對多查詢_MYSQL 單表一對多查詢,将多條記錄合并成一條記錄