oracle数据库表对比
oracle 两表数据对比---minus1 引言在程序设计的过程中,往往会遇到两个记录集的比较。如华东电网PMS接口中实现传递一天中变更(新增、修改、删除)的数据。实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等等。 本文主要讨论利用ORACLE的MINUS函数,直接实现两个记录集的比较。 2 实现步骤 假设两个记录集分别以表的方式存在,原始表为A,产生的比较表为B。 2.1 判断原始表和比较表的增量差异 利用MINUS函数,判断原始表与比较表的增量差异。 此增量数据包含两部分: 1)原始表A有、比较表B没有; 2)原始表A和比较表B都有,但是某些字段发生了改变。 2.2 判断比较表与原始表的增量差异 利用MINUS函数,判断比较表与原始表的增量差异。 此增量数据包含两部分: 1)比较表B有、原始表A没有; 2)比较表B和原始表A都有,但是某些字段发生了改变。 2.3 得出结果集 利用SQL语句中的对两种增量差异的处理,实现判别出比较表相对于原始表是进行了“插入”、“修改”、“删除”的情况。 3 实例演练 3.1创建表并插入数据 Create table A(A1 number(12),A2 varchar2(50)); 3.2进行增量差异数据比较 3.2.1原始表A与比较表B的增量差异 Select * from A minus select * from B; 结果如下: A1 A2 3.2.2比较表B与原始表A的增量差异 Select * from B minus select * from A; 结果如下: B1 B2 3.2.3两种增量差异的合集 此合集包含3类数据: --1、原始表A存在、比较表B不存在,属于删除类数据,出现次数1 --2、原始表A不存在、比较表B存在,属于新增类数据,出现次数1 --3、原始表A和比较表B都存在,属于修改类数据,出现次数2 Select A1,A2,1 t from (Select * from A minus select * from B) union 结果如下: A1 A2 T 3.3得到结果 Select A1,sum(t) from 结果如下: A1 SUM(T) 结果中SUM(T)为1的为“删除”的数据,SUM(T)为2的为“新增”的数据,SUM(T)为3的为“修改”的数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |