基本上,问题是如何从中得到:

foo_id   foo_name
1        A
1        B
2        C


到此:

评论

DOWNVOTE命名列字符串确实很容易混淆,它给它一个看起来像数据类型的名称。因此,任何答案也都会受到影响,因为答案在指定列名称时看起来就像是在指定数据类型

@barlop通过编辑问题和答案来解决该问题。

#1 楼

SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;


http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

从上面的链接,GROUP_CONCAT:此函数返回一个字符串结果,其中包含来自组的串联的非NULL值。如果没有非NULL值,则返回NULL。

#2 楼

SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id


这里有更多详细信息。

从上面的链接,GROUP_CONCAT:该函数返回一个字符串结果,其中包含来自组的串联非NULL值。如果没有非NULL值,则返回NULL。

评论


结果列的字符数有限制。看到这里和文档:)

–马洛
16年1月26日在9:53

#3 楼

SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id


会给您一个逗号分隔的字符串

#4 楼

SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;


:-
在MySQL中,您可以获得表达式组合的串联值
。若要消除重复的值,请使用DISTINCT子句。要对结果中的值进行排序,请使用ORDER BY子句。要以相反的顺序进行排序,请在ORDER BY子句中将DESC(降序)关键字添加到要作为排序依据的列的名称。默认为升序;这可以使用ASC关键字明确指定。组中值之间的默认分隔符是逗号(“,”)。要明确指定分隔符,请使用SEPARATOR,后跟应该在组值之间插入的字符串文字值。要完全消除分隔符,请指定SEPARATOR。。


#5 楼

结果被截断为group_concat_max_len系统变量给定的最大长度,该默认值的默认值为1024个字符,因此我们首先执行以下操作:

,例如:

SET group_concat_max_len=100000000;


评论


结果将被截断为由group_concat_max_len系统变量指定的最大长度,该默认值的默认值为1024个字符。 docs

–马洛
16 Jan 26'9:48



此group_concat_max_len配置的范围是什么?当前的连接/会话,还是会影响其他客户端?

–冷冻火焰
16年6月28日在8:34

@FrozenFlame:>如果不存在修饰符,则SET更改会话变量。如果变量没有会话值,则会发生错误。来自dev.mysql.com/doc/refman/5.7/en/using-system-variables.html

– arminrosu
17-2-16在12:56



这不会回答OP的问题,而只会添加有用的信息。这应该是评论,而不是答案。

–西恩·比恩(Sean the Bean)
17年12月7日14:49在

感谢您提供此代码段,它可能会提供一些有限的即时帮助。通过说明为什么这是一个很好的解决方案,正确的解释将大大提高其长期价值,对于其他存在类似问题的读者来说,这样做将更为有用。请修改您的答案以添加一些解释,包括您所做的假设。

–唐老鸭
17年12月13日在22:39

#6 楼

很好的答案。
我也遇到了NULLS问题,并设法通过在GROUP_CONCAT内包含一个COALESCE来解决了这个问题。示例如下:

SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ') 
FROM table 
GROUP BY id;


希望对别人有帮助