P粉6048485882023-08-28 16:02:00
我的做法與接受的答案略有不同。這樣您就可以避免使用 GROUP_CONCAT,它預設為 1024 個字符,如果您有很多字段,則該限制將不起作用,除非您更改限制。
SET @sql = ''; SELECT @sql := CONCAT(@sql,if(@sql='','',', '),temp.output) FROM ( SELECT DISTINCT CONCAT( 'MAX(IF(pa.fieldname = ''', fieldname, ''', pa.fieldvalue, NULL)) AS ', fieldname ) as output FROM product_additional ) as temp; 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, p.name, p.description'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;#
P粉4959559862023-08-28 10:33:43
MySQL 中動態執行此操作的唯一方法是使用已準備好的語句。這是一篇關於它們的好文章:
#您的程式碼將如下所示:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(pa.fieldname = ''', fieldname, ''', pa.fieldvalue, NULL)) AS ', fieldname ) ) INTO @sql FROM 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, p.name, p.description'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
請參考演示
注意:GROUP_CONCAT 函數的長度限制為 1024 個字元。查看參數group_concat_max_len