2011-12-01 104 views
8

我目前有一些带回标签的sql。他们应该有不同的ID,但他们不....所以我目前的数据是这样的:mysql将不同的行选入逗号分隔的列表列

Microsoft | GGG | 1 | 167 
Microsoft | GGG | 1 | 2 
Microsoft | GGG | 1 | 1 

我想什么做的是只有一排带回来串连成一个划定的最后一列像这样的列表:

Microsoft | GGG | 1 | 167, 2, 1 

我为此使用了mySQL 5。

+0

我不知道你问你的标志是什么。如果您问了错误的问题,请评估所提供的答案,看看它是否回答您在此提出的问题,并通过选择正确的答案来解决问题。然后你可以去问你的*真实问题。 – Will

回答

21

使用GROUP_CONCAT()为此,用GROUP BY覆盖其他三列:

SELECT 
    name, -- Microsoft 
    other, -- GGG 
    other2, -- 1 
    GROUP_CONCAT(id) AS ids 
FROM tbl 
GROUP BY name, other, other2 
+0

如果'ids'是一个大集合,不要忘记设置一个足够大的值:'SET SESSION group_concat_max_len = 1000000;' – bishop

+0

这不会给出不同的值。 – geoidesic

+0

@geoidesic不确定你的意思。这个问题没有要求不同的值,但如果你阅读['GROUP_CONCAT()'文档](https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html# function_group-concat),你会发现它支持'DISTINCT'关键字去重复它的字符串返回值。 –