在mysql group_concat操作中允许重复的值

时间:2014-11-17 20:18:05

标签: mysql group-concat

我,使用以下sql语句:

SELECT  group_concat(name SEPARATOR '') FROM words WHERE id in (1,2,3,1,2)

此声明中的问题是,只有来自1,2,3的名称将连接在一起,但我需要1,2,3,1,2中的名称连接,确切的顺序。

所以我会允许重复的值,我该怎么做?

1 个答案:

答案 0 :(得分:0)

假设id列不唯一?如果是这样,并且有多行可以使用。

[test]> create table words ( id int, name varchar(200));
Query OK, 0 rows affected (0.00 sec)

[test]> insert into words (id,name) values (1,'a'),(2,'b'),(3,'c'),(2,'b'),(3,'c');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

[test]> SELECT  group_concat(name ) FROM words WHERE id in (1,2,3) ;
+---------------------+
| group_concat(name ) |
+---------------------+
| a,b,c,b,c           |
+---------------------+
1 row in set (0.00 sec)

多次在列表中的位置指定标识符将不包括每个规范的匹配项。此外,正如您在我的示例中所看到的,指定每次仍然会导致返回插入的每个匹配。

更新澄清后:

如果您的id列是uninque,那么您不会通过这样的简单查询获得要返回的行的多个副本。做一个UNION ALL

唯一地表示每组重复项将起作用

 [test]> select group_concat(name) from (select name from words where id in (1,2,3) union all select name from words where id in (1,2)) a;
+--------------------+
| group_concat(name) |
+--------------------+
| a,b,c,a,b          |
+--------------------+
1 row in set (0.00 sec)