2013-08-29 88 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 
相關問題