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