2014-06-30 6 views
1

Actuellement, j'ai une base de données avec deux tables zip_codes et emails. zip_codes contient les trois champs zid, eid et zip. Les e-mails contiennent eid, e-mail et lieu.MySQL Joindre plusieurs lignes dans un seul champ

Voici ma requête en cours:

SELECT a.zid, a.zips, b.email, b.location FROM zip_codes AS a INNER JOIN emails AS b ON a.eid = b.eid 

Au fond ce que je veux faire est de transformer les résultats que je reçois dans ce (http://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/), mais je ne suis pas sûr du tout comment faire avec mon Configuration actuelle.

J'ai essayé de changer les noms mais j'ai une erreur dans ma syntaxe près de [text()] et comme je n'ai aucune idée de comment l'utiliser, je suis bloqué.

Toute aide est appréciée.

+0

Est-ce que vos emails ont plus d'un code postal et que vous voulez tous les codes postaux avec chaque email comme une liste? –

+0

Il y a entre 10 et 80 codes postaux pour un seul courriel. Je voudrais obtenir une seule ligne pour chaque email et l'emplacement qui a tous les codes postaux séparés par des virgules. – Devyn

Répondre

0

Pour Mysql, vous pouvez utiliser GROUP_CONCAT

SELECT 
    b.email, 
    b.location, 
    GROUP_CONCAT(a.zips) zipcodes 
FROM 
    zip_codes AS a 
    INNER JOIN emails AS b 
    ON a.eid = b.eid 
GROUP BY b.eid 

Remarque pour l'utilisation GROUP_CONCAT: Le résultat est tronqué à la longueur maximale est donnée par la variable système group_concat_max_len, qui a une valeur par défaut de 1024 La valeur peut être supérieure, bien que la longueur maximale effective de la valeur de retour soit limitée par la valeur de max_allowed_packet

+1

Merci. Cela fonctionne parfaitement. – Devyn

Questions connexes