首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL GROUP_CONCAT 實現同一列多行值合併為單行逗號分隔字符串

     編輯:MySQL 綜合教學

MySQL GROUP_CONCAT 實現同一列多行值合併為單行逗號分隔字符串

業務常見需求:一條主記錄對應多個關聯標籤/分類,查詢時希望將這些標籤合併為一行,以逗號分隔,避免應用層循環拼接。MySQL 內建聚合函數 GROUP_CONCAT() 完美解決此問題。

場景示例

原始查詢返回多行,同一 id 對應多個 group_name:

原始多行結果

目標結果:按 id 分組,group_name 合併為一行

合併後單行結果

核心 SQL 對比

修改前:

SELECT tr.id, tig.group_name
FROM tj_record tr
INNER JOIN tj_item_group_ex tige ON tr.id = tige.record_id
INNER JOIN tj_item_group tig ON tige.id = tig.id
WHERE tr.id IN ('1407090008','1407090009')
  AND tige.id IN ('27','31');

修改後(紅色為變動):

SELECT tr.id, GROUP_CONCAT(tig.group_name)
FROM tj_record tr
INNER JOIN tj_item_group_ex tige ON tr.id = tige.record_id
INNER JOIN tj_item_group tig ON tige.id = tig.id
WHERE tr.id IN ('1407090008','1407090009')
  AND tige.id IN ('27','31')
GROUP BY tr.id;

關鍵點解析

  • GROUP_CONCAT(expr):將分組內非 NULL 的 expr 值以逗號拼接,返回字符串。
  • GROUP BY tr.id:指定分組依據,確保每個 id 僅輸出一行。
  • 默認分隔符為逗號,可自定義:GROUP_CONCAT(tig.group_name SEPARATOR '|')。
  • 結果長度受 group_concat_max_len 限制(默認 1024 字節),大數據量需調大:SET SESSION group_concat_max_len = 1000000;。

應用層受益

應用程式直接獲得 id, tags_string 兩列,無需二次處理,代碼更簡潔、效率更高。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved