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

目录

    • 事件起因
      • 总结的sql写法
    • 过程
    • 执行的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表:
【mysql】使用sql将一个表的数据复制筛选部分行和列到另一个表去_第1张图片

user和role(用户和角色的关系表)
【mysql】使用sql将一个表的数据复制筛选部分行和列到另一个表去_第2张图片
使用 sql 语句将数据表中没有的用户角色关系导入到该表中去(怎样的一个执行过程说明):
【mysql】使用sql将一个表的数据复制筛选部分行和列到另一个表去_第3张图片

执行的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)

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

你可能感兴趣的:(IT成长笔记,大后端开发学习,sql,mysql,navicat)