Oracle 用merge into 解决插入重复数据问题
继昨天解决用python向oralce插入数据问题,今天考虑到我插入的数据每次都是包含前一次插入的数据,太多重复值不利于之后的数据可视化,所以想着能不能插入数据的时候自动判别重复的值,只导入不重复的值,一开始用
install into a where a.t not in (select t from a )
结果报错,百度才知道install不能直接跟where,查询好久发现好多都指向用merge into
,于是直接去搜了它的用法,感觉可行,就试着让表自己和自己去重,仔细想了一下发现逻辑上行不通,就想到建一个临时表,每次新增数据用python插入到临时表中,再用merge into 将临时表中不重复的插入最终表中
merge into table1 a
using table_temp b
on(a.col = b.col)
when not matched then
insert(col1,col2)--表a的所有列名
values(b.col1,b.col2) --表b的所有列名
个人对merge into在本次需求中的理解:
table1 就是需要插入的表
table_temp 就是我的临时表,也就是需要将这个表里的数导入到需要被插入的表中
on 两个表中有代表意义唯一的值,例如学生id
when not matched then 当表b中数没有和表a匹配上时,也就是说此时我的临时表中的数和表a匹配后,将相同的数剔除剩余不同的部分
insert(col1,col2) 将上面提到的剩余不同的数插入a表中,这里的insert括号里是指a表的列名,全部列出来,不列出来会怎么样,还没测试过
values(b.col1,b.col2)这里需要列出的是临时表表b的所有列名
最后通过先清空临时表,再将爬取到的数插入临时表中,再将临时表中的数通过merge into 插入最终表中,成功实现用python去重插入,特此记录一下,merge into还可以进行删改操作,因为本次需求中未用到,等之后有需求再学习使用。
最近越来越发现已用促学才能更快学习掌握,至少不盲目,每天进步一点点,时间宝贵,且学且珍惜!