数据订正:insert select,删除重复数据,truncate

来源:互联网 发布:拳击 书 知乎 编辑:程序博客网 时间:2024/05/18 00:31

  1、insert select

在这次项目中新添了公司表,这个表初始数据得从员工表中获取。但是在insert select时有个问题,公司表中存在员工表里没有的字段,同时这个字段不能为空。
   在这里发现了insert select的新用法,如下:
insert into md_corp_info m      (corp_info_id,corp_name,corp_status ,creator,gmt_create,modifier,gmt_modified)
select t.corp_id,t.corp_name,0 ,t.user_id,t.gmt_create,t.modifier,sysdate

from md_udb_info t where t.is_admin='y'

md_udb_info中并没有corp_status字段,所以在select的时候可以设置一个默认值

 

2、删除重复数据

在员工表里面存在一些重复的公司id,且公司名又不同。select出来再插入公司表会出现corp_id冲突。所以得把员工表进行优化,删除重复数据(这是开发库,数据比较混乱)

     在这里使用count与rowid结合实现

delete from md_udb_info

where

/*获取在多个记录中存在的的corp_id*/

corp_id in (select corp_id from  md_udb_info group   by   corp_id    having   count(corp_id) > 1 )

/*去除行号最小的一个*/
and rowid not in (select min(rowid) from   md_udb_info   group by corp_id   having count(corp_id)>1)

 

3、删除表

由于与DB交流有误,后来在公司表中新添了一个字段。开发库中的数据得全部删除再重新导入
删除一个表的所有数据(PS:是表中数据,而不是表),可以使用truncate

     truncate table 表名

truncate作用与不带where的delete语句相同,但是它的速度更快而且占资源少

PS: 但是要特别注意的是,delete是dml(数据操纵语言),操作会被放到rollback segement中,有trigger的话也会被触发,而truncate是ddl(数据定义语言),立即执行,不能回滚,也不会触发trigger。所以没有备份的话用truncate要特别小心

原创粉丝点击