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
Post a Comment