2009-07-20 20 views
2

la requête:sql: pourquoi la requête répète-t-elle des valeurs lors de l'utilisation de '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 

Table un

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

Tableau b

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

résultant de sortie au-dessus de la requête:

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

Le tableau réel s J'utilise 10 colonnes chacune, donc stocker tout dans une table n'est pas une solution de contournement. Cela dit, comment puis-je changer la requête pour retourner seulement 'Apple,Mango' pour MemberNam e?

Répondre

8

Ajouter le mot-clé DISTINCT à la colonne groupée:

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

essayer

GROUP_CONCAT(Distinct FruitName)