You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中使用PREPARE语句执行查询时如何创建表?

将动态查询结果生成新表的解决方案

针对你的需求,只需要在生成动态SQL后、执行前,给@sql变量加上CREATE TABLE ... AS前缀即可。具体操作如下:

  1. 新增变量定义你要创建的新表名(可自定义)
  2. 把创建表的语句拼接到动态SQL最前面
  3. 执行修改后的动态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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:25:23