2009-07-20 13 views
2

Die Abfrage:sql: Warum wiederholt die Abfrage Werte bei Verwendung von 'GROUP CONCAT' + 'GROUP BY'?

SELECT MemberId, a.MemberName, GROUP_CONCAT(FruitName) FROM a LEFT JOIN b ON 
a.MemberName = b.MemberName GROUP BY a.MemberName 

Tabelle a

MemberID   MemberName    
-------------- ---------- 
1     Al     
1     Al  
3     A2  

Tabelle B

MemberName    FruitName 
---------------  -------------- 
Al      Apple 
Al      Mango 
A2      Cherry 

Output von oben Abfrage Resultierende:

MemberId MemberName GROUP_CONCAT(FruitName) 
3   A2   Cherry 
1   A1   Apple,Apple,Mango,Mango 

Die eigentliche Tisch s Ich benutze haben 10 Spalten pro Stück so nur alles in einer Tabelle speichern ist keine Umgehung. Wie kann ich die Abfrage so ändern, dass nur 'Apple,Mango' für MemberNam e zurückgegeben wird?

Antwort

8

Fügen Sie das Schlüsselwort DISTINCT auf die gruppierte Spalte:

GROUP_CONCAT(DISTINCT FruitName) 
3
SELECT MemberId, a.MemberName, GROUP_CONCAT(DISTINCT FruitName) 
FROM a 
LEFT JOIN 
     b 
ON  a.MemberName = b.MemberName 
GROUP BY 
     a.MemberName 
5

versuchen

GROUP_CONCAT(Distinct FruitName)