【发布时间】:2014-11-17 20:18:05
【问题描述】:
我,使用下面的sql语句:
SELECT group_concat(name SEPARATOR '') FROM words WHERE id in (1,2,3,1,2)
这个语句的问题是,只有 1,2,3 中的名称会连接,但我需要 1,2,3,1,2 中的名称连接顺序。
所以我将允许重复值,我该怎么做?
【问题讨论】:
标签: 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 中的名称连接顺序。
所以我将允许重复值,我该怎么做?
【问题讨论】:
标签: mysql group-concat
假设 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)
在 where in 列表中多次指定标识符将不包括每个规范的匹配项。此外,正如您在我的示例中看到的那样,指定每次仍然会导致插入的每个匹配项都被返回。
澄清后更新:
如果您的 id 列是唯一的,您将不会通过这样的简单查询获得要返回的行的多个副本。做一个 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)
【讨论】: