MYSQL 單表一對多查詢,將多條記錄合並成一條記錄


一、描述:

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

    

    想要達到的效果:

    

    實現SQL語句:

1 SELECT 
2   a.books,
3   GROUP_CONCAT(a.name SEPARATOR '||') AS NAMES,
4   GROUP_CONCAT(a.code SEPARATOR '||') AS codes
5 FROM
6   temp_info a 
7 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'; 

三、使用實例:

  

1 SELECT 
2   a.books,
3   GROUP_CONCAT(DISTINCT a.name SEPARATOR '||') AS NAMES,  -- 使用 distinct 去除重復數據、
4   GROUP_CONCAT(a.code ORDER BY a.code DESC SEPARATOR '||') AS codes  -- 使用order by 對數據進行排序 
5 FROM
6 temp_info a
7 GROUP BY a.books ;

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM