【mysql】使用sql将一个表的数据复制筛选部分行和列到另一个表去

事件起因

给客户的系统导入数据,涉及到一些初始的账户、部门、角色(用户与角色的对应关系表什么的),反正也就每个表几千条的样子吧

但是在写后端接口进行文件导入和写sql进行一些数据关联表的导入时出现了一个问题 怎样把一个表的数据比如说id放到另一个表中去

我们常规的插入语句:

insert into 表名(字段名1,字段名2....values(字段名1数据,字段名2数据....)
values(字段名1数据,字段名2数据.....)
....

要想插入多行只有继续向下写values()

总结的sql写法

先将找到的一种sql语句写法写在这儿

insert into table1(fld1, fld2) select fld1, 5 from table2 where ...

插入语句后面接select语句 能够他批量插入一个集合的数据,字段名和顺序需要自己进行对应,里面有select语句也可使用where等sql语句进行一定的数据筛选,从而达到数据从一个表到另一个表的作用

这儿就涉及到另一个写法:
将一个表所有的数据内容直接复制到另一个表中去

select * into table1 from table2

该语句与上面的那个语句有一定的区别:
该语句要求table1表不存在,相当于完全创建了一个新的表,然后将table2表中的内容全部查询出来,然后复制了一份在table1表中去

而前面的第一条语句是对两个已经存在的表的操作,使用的insert into语句:

过程

前提(各个表的结构)
user表:
在这里插入图片描述

user和role(用户和角色的关系表)
在这里插入图片描述
使用 sql 语句将数据表中没有的用户角色关系导入到该表中去(怎样的一个执行过程说明):
在这里插入图片描述

执行的sql语句

下面的语句执行的意思是(将sys_user表中还没有赋予角色的账户赋予一个默认角色id(100000) not in后面的集合就是之前查询出来的账户角色表中已有的用户角色关系的用户id(虽然这儿也可以用sql语句给代替)):

insert into sys_user_role(user_id,role_id) 
select user_id,100000 role_id
from sys_user 
where user_id not in (1,12822,12823,12824,12825,12952,12953,12954,13030,13031,13032,13121,13122,13123,13304,13305,13306,13331,13332,13333,13334,13335,13336,13781,13782,13788,13794,13806,13807,13808,13809,13837,13868,13912,13915,13916,13922,13930,13932,13937,13939,13949,13968,14031,14102,14168,14206,14324,14328,14329,14332,14345,14346,14347,14351,14355,14358,14383,14388,14389,14453,14461,14462,14463,14476,14478,14479,14488,14559)

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值