最新消息:因从typecho切换到wordpress, 由于转换导入问题,文章可能存在部分乱码或者排版问题,逐个排查修复中...

MySQL中如何让查询结果返回以逗号分隔的列表

懒得分类 admin 891浏览 0评论

原文见: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中如何让查询结果返回以逗号分隔的列表

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址