2013-08-29 55 views
1

例如,我使用的是world.sql数据库,这里是什么它看起来像一个简短的样本:MySQL的GROUP_CONCAT返回所有值,而不是值的每列

每个
CountryCode:char(3) Language:char(30) IsOfficial:enum('T', 'F') Percentage:float(4,1) 

会有几个条目国家代码,看起来像这样:

ABW Dutch T 5.3 
ABW English T 9.5 

我的目标如下:我想获得一个CountryCode的所有官方语言。也就是说,如果这是所有国家代码为ABW我希望它返回:

ABW Dutch|English 

这里是我的MySQL查询:

SELECT 
    CountryCode, 
    group_concat(top.offlanguages SEPARATOR "|") AS "Official Languages" 
FROM (
    SELECT 
    CountryCode, 
    Language AS offlanguages 
    FROM CountryLanguage 
    WHERE IsOfficial = 'T' 
    GROUP BY CountryCode 
) top 

出于某种原因,返回下ABW COUNTRYCODE每一个可能的语言,我无法弄清楚为什么。

也就是说,它返回是这样的:

ABW荷兰语|英语|阿拉伯语| ...(在和和)

+0

@AzizShaikh哪里是用另一种查询与主查询的一部分的需求?没有这个可以做到。对? – rakeshjain

+0

AzizShaikh的解决方案是最好的解决方案吗? – rakeshjain

+0

@rakeshjain我相信你是对的,但我没有测试过。你可以在你的答案中编辑并提到这个。 OP可能会在测试后测试并使用您的建议。 –

回答

3

试试这个下面的查询

SELECT CountryCode, group_concat(Language separator "|") as "Official Languages" 
FROM CountryLanguage where IsOfficial = 'T' group by CountryCode 
+0

是的,你的确是更好,它的工作原理。谢谢 – Jason

1

GROUP BY是在错误的地方。它应该是后top

试试这个:

select CountryCode, group_concat(top.offlanguages separator "|") as "Official Languages" from (
    select CountryCode, Language as offlanguages 
    from CountryLanguage where IsOfficial = 'T' 
) top group by CountryCode 
相关问题