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

导读:本篇文章讲解 【mysql】使用sql将一个表的数据复制筛选部分行和列到另一个表去,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

事件起因

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

但是在写后端接口进行文件导入和写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)

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114542.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!