MYSQL Multiple Group Concat -


hi have table called engineers , table called post_codes

when use following sql list of engineers , postcodes associated them using group concat statement cannot figure out how include in group concat (if indeed need one) list in field called secondary_post_codes_assigned post codes linked same engineer via secondary_engineer_id field.

select      engineer.engineer,group_concat(post_code separator ', ') post_codes_assigned,     engineer.region,      engineer.active,      engineer.engineer_id engineer inner join post_code on engineer.engineer_id = post_code.engineer_id  group engineer_id  

what need output similar this.

engineer_id | post_codes_assigned | secondary_post_codes_assigned   ---------- 1           | aw, aw3             | b12                          | 2           | b12                 | aw, cv12                     |                 

i hope clear pretty new mysql.

regards alan

you joining primary post codes , list them, same secondary ones.

select    e.engineer,   group_concat(distinct pc1.post_code) primary_post_codes_assigned,   group_concat(distinct pc2.post_code) secondary_post_codes_assigned,   e.region,    e.active,    e.engineer_id engineer e join post_code pc1 on e.engineer_id = pc1.engineer_id  join post_code pc2 on e.engineer_id = pc2.secondary_engineer_id group e.engineer_id; 

as see, need distinct because when selecting primary , secondary postcodes, getting rows combinations of them in intermediate result. must rid of duplicates. reason ist better aggregate before joining. (which consider idea, may want make habit when working aggregates.)

select    e.engineer,   pc1.post_codes primary_post_codes_assigned,   pc2.post_codes secondary_post_codes_assigned,   e.region,    e.active,    e.engineer_id engineer e join  (   select engineer_id, group_concat(post_code) post_codes   post_code   group engineer_id ) pc1 on e.engineer_id = pc1.engineer_id  join  (   select secondary_engineer_id, group_concat(post_code) post_codes   post_code   group secondary_engineer_id ) pc2 on e.engineer_id = pc2.secondary_engineer_id; 

a third option subqueries in select clause. prefer them in from clause shown, because easy add more columns subqueries, not possible in select clause.

select    e.engineer,   (     select group_concat(pc1.post_code)     post_code pc1     pc1.engineer_id = e.engineer_id   ) primary_post_codes_assigned,   (     select group_concat(pc2.post_code)     post_code pc2     pc2.secondary_engineer_id = e.engineer_id    ) secondary_post_codes_assigned,   e.region,    e.active,    e.engineer_id engineer e; 

Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -