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

   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要特别小心

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值