MySQL中动态执行此操作的唯一方法是使用Prepared语句。这是一篇关于它们的好文章:
动态数据透视表(将行转换为列)
您的代码如下所示:
SET @sql = NULL;SELECt GROUP_CONCAt(DISTINCT CONCAt( 'MAX(IF(pa.fieldname = ''', fieldname, ''', pa.fieldvalue, NULL)) AS ', fieldname ) ) INTO @sqlFROM product_additional;SET @sql = CONCAt('SELECt p.id , p.name , p.description, ', @sql, ' FROM product p LEFT JOIN product_additional AS pa ON p.id = pa.id GROUP BY p.id');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;观看演示
注意:GROUP_CONCAT函数的限制为1024个字符。参见参数group_concat_max_len



