【问题标题】:Create an insert to pivot value pair values into a table创建插入以将值对值透视到表中
【发布时间】:2020-12-19 18:21:59
【问题描述】:

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

基于 Taryns 对此问题的回答

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;

所以,我的问题是 - 有谁知道我可以如何更改它以运行 INSERT 而不是 SELECT 以便我可以填充新成员表?

【问题讨论】:

    标签: mysql sql pivot sql-insert create-table


    【解决方案1】:

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

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

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

    请注意,新表的数据类型是从查询的元数据中推断出来的;这可能会,也可能不会,完全符合您的要求。您可以查看the documentation了解更多详情。

    【讨论】:

    • 太棒了,非常感谢您似乎正在完成这项工作
    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 2021-06-27
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多