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


修改前:
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 兩列,無需二次處理,代碼更簡潔、效率更高。