创建一个插入以将值对值转换为 table

Create an insert to pivot value pair values into a table

我有一个值对 table,我想用它来创建成员 table

基于 Taryn 对这个问题的回答

MySQL pivot table query with dynamic columns

我有这段代码可以创建选择数据,效果很好

    SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN wpdg_usermeta.meta_key = ''',
      meta_key,
      ''' THEN wpdg_usermeta.meta_value END) `',
      meta_key, '`'
    )
  ) INTO @sql
FROM
wpdg_usermeta
WHERE
wpdg_usermeta.meta_key like "member_%"
;

SET @sql = CONCAT('SELECT user_id, ', @sql, ' 
                  FROM wpdg_usermeta 
                   GROUP BY user_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

所以,我的问题是 - 有谁知道我如何将其更改为 运行 插入而不是 SELECT,以便我可以填充新成员 table?

您想用动态查询的结果创建一个新的 table。我认为最简单的方法是使用 create table ... as select ... 语法。

这需要对您的代码进行很少的更改,并允许您根据查询结果即时创建 table:

SET @sql = CONCAT(
    'CREATE TABLE member AS SELECT user_id, ', 
     @sql, 
    ' FROM wpdg_usermeta GROUP BY user_id'
);

请注意,新 table 的数据类型是从查询的元数据中推断出来的;这可能正是您想要的,也可能不是。您可以查看 the documentation 了解更多详情。