原文见:https://database.guide/how-to-return-query-results-as-a-comma-separated-list-in-mysql/
我这里做一下翻译:
在MySQL中,通过使用 GROUP_CONCAT() 函数,你可以以逗号分隔的列表的形式来返回你的查询结果。
GROUP_CONCAT() 函数是特别定制的函数,用于拼接查询结果到一个列表,可以是以逗号分隔,也可以是用户选择的其它分隔符。
这篇文章通过一些例子来讲解如何使用。
数据
首先,让我们用以下数据来开始我们的例子:
USE Solutions; SELECT TaskName FROM Tasks;
结果:
+-------------------+ | TaskName | +-------------------+ | Do garden | | Feed cats | | Paint roof | | Take dog for walk | | Relax | | Feed cats | +-------------------+
简例
这里是简洁的例子来演示 GROUP_CONCAT() 函数:
SELECT GROUP_CONCAT(TaskName) FROM Tasks;
结果:
+------------------------------------------------------------------+ | GROUP_CONCAT(TaskName) | +------------------------------------------------------------------+ | Do garden,Feed cats,Paint roof,Take dog for walk,Relax,Feed cats | +------------------------------------------------------------------+
然后你可以看到,原先每一行输出的结果如今已经被拼接成单行。默认情况下,列表使用的是逗号进行分隔。
需要注意的是,这个列表的长度是有限制的。更多细节在本文后面会讲到。
例子 – DISTINCT
你可以使用 DISTINCT 来去除重复项( 让重复的多个记录变成单个)
例子:
SELECT GROUP_CONCAT(DISTINCT TaskName) FROM Tasks;
结果:
+--------------------------------------------------------+ | GROUP_CONCAT(DISTINCT TaskName) | +--------------------------------------------------------+ | Do garden,Feed cats,Paint roof,Relax,Take dog for walk | +--------------------------------------------------------+
所以这种情况下,“Feed cats” 在列表中只出现了一次,而在前面的例子里面它是出现了2次的。
例子 – ORDER BY
你可以使用 ORDER BY 来对指定的列进行排序。
例如:
SELECT GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) FROM Tasks;
结果:
+--------------------------------------------------------+ | GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) | +--------------------------------------------------------+ | Take dog for walk,Relax,Paint roof,Feed cats,Do garden | +--------------------------------------------------------+
所以这个例子中,我使用了 DESC来指定它以降序的方式排序。另外的用法(默认的)是ASC
例子 – 指定一个分隔符
默认情况下,列表是一个逗号分隔的列表。然而,有需要的话,你可以指定一个分隔符。
使用时, 就是用 SEPARATOR 紧跟着你想要用来分隔的字符。
例子:
SELECT GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ') FROM Tasks;
结果:
+----------------------------------------------------------------+ | GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ') | +----------------------------------------------------------------+ | Do garden + Feed cats + Paint roof + Relax + Take dog for walk | +----------------------------------------------------------------+
例子 – 合并多列
你还可以拼接多列,并且使用各自自定义的分隔符
例子:
SELECT GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ') FROM Tasks;
结果:
+------------------------------------------------------------------------------------+ | GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ') | +------------------------------------------------------------------------------------+ | 1) Do garden 2) Feed cats 3) Paint roof 4) Take dog for walk 5) Relax 6) Feed cats | +------------------------------------------------------------------------------------+
在这个例子中,我们同时返回 TaskId 列,和TaskName 列,通过一个回括号和空格进行分隔。
转载请注明:Linc Hu » MySQL中如何让查询结果返回以逗号分隔的列表