i have 2 tables:
table1: |id|create_date|title |type | ------------------------------- | 1|2015-07-20 |bla-bla|ticket| table2_meta: |id|table1_id|meta_name|meta_value| ----------------------------------- | 1| 1 | status | new | | 2| 1 | priority| low | | 3| 1 | owner | alex |
now, wish select this:
|id|create_date|title |status|priority|owner| |1 |2015-07-20 |bla-bla|new |low |alex |
my solution is:
select t1.id, t1.event_date, case when m.meta_name="status" m.meta_value end status, case when m.meta_name="priority" m.meta_value end priority, case when m.meta_name="owner" m.meta_value end owner table1 t1 left join table2_meta m on m.table1_id=t1.id t1.type='ticket' group t1.id so, works. seems litle bit ugly.
my question is:
there other solutions select , how make more productive?
hey try in case pivoting of table sqlfiddle
set @sql = null; select group_concat(distinct concat( 'max(case when meta_name = ''', meta_name, ''' value end) ', concat(meta_name) ) ) @sql table1 t1 left join table2 m on m.table1_id=t1.id t1.type='ticket'; set @sql = concat('select t1.id,', @sql, ' table1 t1 left join table2 m on m.table1_id=t1.id t1.type=''ticket'' group t1.id '); prepare stmt @sql; execute stmt; deallocate prepare stmt;
Comments
Post a Comment