2011-11-04 73 views

回答

1

不是标准的SQL,但MySQL **提供了GROUP_CONCAT,它将完全按照您的要求进行操作。

SELECT foo, GROUP_CONCAT(DISTINCT bar ORDER BY bar) AS bars 
FROM foo_table 
LEFT JOIN bar_table ON bar_table.foo_id = foo_table.foo_id 

**假设没关系,因为你已经标记为mysql

2

的问题,这与标准SQL的一部分,因为它是如此开放式的,这是一个困难的方式来解决问题这提供了一个可预测的答案。无限数量的行基本上是正常的,并且是SQL的预期部分,但无限长度的文本字符串不是。 group_concat()存在于mysql中,但对我来说,它通常是我的需求几乎没有想到的。它唯一能做的就是截断结果,如果它超过了系统限制group_concat_max_len。因此,它仍然需要额外的代码来计算“真实”结果的长度,并查看它是否比group_concat_max_len更长。当然,你可能有一些其他的限制,保证它不会成为一个问题,但更可能的是,它仅仅是不可能的,而不是不可能有超过group_concat_max_len的问题。此外,这意味着您必须在代码中验证group_concat_max_len的值,因为它是可配置的,并可能在稍后的日期更改。

在几乎所有我希望能够使用group_concat()的情况下,我最终发现我最好写一些可以与行中所有值一起工作的东西,而不是将它们连接成一个字符串。但是,如果你只是在mysql>提示符下查找数据,它可能非常方便。

0

SELECT DISTINCT用户名, 集团FROM table_name的

0

会尝试这样的:

SELECT UserName, group_concat(group) allGroup 
FROM tableAssignment 
GROUP BY UserName 

希望它能帮助。

+1

欢迎使用stackoverflow。请在发布之前尝试阅读以前的答案。 'group_concat'已在两年前被建议(并被接受);) – Leigh