通过一个sql语句,如何做到把1个表的数据插入到另外1个表

     

前言

     有时候,我们往往有这种需求:需要把1个表某几个字段的数据根据条件查询出来,再插入到另外一个表。这就是表与表之间数据的转移。

     这种场景,一般是同步历史数据需要。

     假定这两个表分别是A表和B表,并且表结构不一样,只是有部分字段含义一致。

     如果数据少还好说,直接在需要插入数据的表中,手工录入即可。但要是成千上万呢,那手工方式肯定是不行的。下面请看示例,通过sql如何实现。

一、数据准备

1.表结构

1) 创建帮助表 t_help

CREATE TABLE `t_help` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` int(10) DEFAULT NULL COMMENT '用户ID',
  `problems` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题描述',
  `create_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`ID`)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='帮助表';

2) 创建回复表 t_reply

CREATE TABLE `t_reply` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `help_id` int(10) NOT NULL COMMENT '帮助表_主键ID',
  `problems` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题描述',
  `reply` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '回复内容',
  `create_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='回复表';

2.表数据

1)给帮助表 t_help 插入数据

此时回复表  t_reply 数据为空,未插入任何数据

二、需求

     想把 帮助表 t_help 的数据转移到 回复表 t_reply,字段值对应关系如下:

     t_help 表                            t_reply 表

    problems          -->              problems

    id                      -->              help_id

    当前时间          -->              create_date                                  

    固定值              -->              reply

 说明:

   t_reply 表中,reply的值就插入固定文本"默认一个内容", create_date的值插入当前时间,其余字段和 t_help 表 对应。 

三、实现方式

1.SQL模板

INSERT INTO `目标表`(各个字段)
(
SELECT
	各个字段 或者 固定值
FROM
	来源表 
WHERE
	条件
	);

说明:

1)先按照正常写法,写目标表的插入语句。

2)一般第一个右括号 ) 后面跟的是 values,如下所示

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);

这里后面直接跟一对括号,括号里面写查询语句即可。

3)查询语句写来源表的查询。

2.SQL实现

INSERT INTO `t_reply`(help_id,problems,reply,create_date)
(
SELECT
    id,
    problems,
    '默认一个内容',
    NOW( )
FROM
    t_help 
WHERE
    1 = 1
    );

这里,如果是固定字符串内容,直接用单引号包裹,如果是当前时间,直接用NOW() 函数即可。查询语句不加 where 1=1也可以。 

通过执行上述语句,就完成了t_help 表到 t_reply 表数据的转移啦~

这时,t_reply 表数据就不为空了,表数据如下图所示:

 

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

格子衫111

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值