MySQL中使用PREPARE语句执行查询时如何创建表?
将动态查询结果生成新表的解决方案
针对你的需求,只需要在生成动态SQL后、执行前,给@sql变量加上CREATE TABLE ... AS前缀即可。具体操作如下:
- 新增变量定义你要创建的新表名(可自定义)
- 把创建表的语句拼接到动态SQL最前面
- 执行修改后的动态SQL,自动完成表创建和数据插入
修改后的完整代码
SET SESSION group_concat_max_len = 92160; SET @target_schema='rd'; SET @target_table='pbc_gl'; SET @target_where='`acct`'; -- 新增:定义新表名 SET @new_table='pbc_gl_transformed'; select GROUP_CONCAT(qry SEPARATOR ' UNION ALL ') INTO @sql FROM ( SELECT CONCAT(' SELECT `acct`,', QUOTE(COLUMN_NAME), ' AS `Business_Unit`,`', COLUMN_NAME, '` AS `value` FROM `', @target_table, '` WHERE ', @target_where) qry FROM ( SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`=@target_schema AND `TABLE_NAME`=@target_table AND COLUMN_NAME != 'acct' ) AS `A` ) AS `B` ; -- 关键步骤:拼接CREATE TABLE语句到动态SQL前 SET @sql = CONCAT('CREATE TABLE `', @new_table, '` AS ', @sql); PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
额外提示
- 如果希望新表不存在时才创建,把
CREATE TABLE改成CREATE TABLE IF NOT EXISTS - 如果需要覆盖已有表的结构和数据,可使用
REPLACE TABLE代替CREATE TABLE - 执行完成后,通过
SELECT * FROM pbc_gl_transformed;即可查看新表数据
内容的提问来源于stack exchange,提问作者Siddhartha
相关产品推荐
相关产品推荐

