mysql多表合并为一张表

有人提出要将4张表合并成一张。数据量比较大,有4千万条数据。有很多重复数据,需要对某一列进行去重。

数据量太大的话,可以看我另外一篇:http://www.cnblogs.com/magmell/p/8941338.html

mysql:思路:

1、导出数据。select into outfile。

2、传输到要导入数据的服务器上。

3、创建一张新表,主键和约束等与那三张表一样。

4、LOAD DATA INFILE导入。利用replace参数进行覆盖达到去重的目的。

LOAD DATA INFILE '/backup/tbl_get.csv' replace INTO TABLE emob.tbl_new;

LOAD DATA INFILE '/backup/tbl_jue.csv' replace INTO TABLE emob.tbl_new;

LOAD DATA INFILE '/backup/tbl_ors.csv' replace INTO TABLE emob.tbl_new;

全部导入后,对其去重:

select * from tbl_new a where a.imgi in (select imgi from tbl_new group by imgi having count(imgi)>1);

 

oracle:

通过sqlldr工具导入:

1、创建一张表,表中不要有任何约束。

2、先写一个load_ora.ctl文件,内容:

unrecoverable        #不产生日志
load data
infile '/usr/local/tbl_imsi2nu.csv'
append into table eyumob.tbl_new     #oracle的replace参数是对表原有的数据全部清空,相当于truncate    
fields terminated by '\t'
(imgi,"number",cff)

3、执行导入命令:

sqlldr SYSTEM/oracle control=/usr/local/load_ora.ctl log=~/load.log bad=~/soy.bad rows=100000 readsize=20971520 bindsize=20971520 PARALLEL=TRUE DIRECT=TRUE skip_index_maintenance=TRUE

 DIRECT=TRUE:可能会导致一些问题,比如索引失效等。最好不要使用。

4、合并后对新表去重:

DELETE FROM eyumob.tbl_new t1 WHERE t1.ROWID <> (SELECT MIN (t2.ROWID) FROM eyumob.tbl_new t2 WHERE t1.imgi = t2.imgi);

 5、在表中添加约束

posted on 2018-04-16 14:58  叶落千尘 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/magmell/p/8855907.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值