创建一个插入以将值对值转换为 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 了解更多详情。
我有一个值对 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 了解更多详情。