度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle中两表数据对比—minus [打印本页]

作者: 张兴康    时间: 2020-3-12 14:38
标题: oracle中两表数据对比—minus
首先我们创建表并插入数据:
  1. Create table A(A1 number(12),A2 varchar2(50));
  2. Create table B(B1 number(12),B2 varchar2(50));
  3. Insert Into A Values (1,'a');
  4. Insert Into A Values (2,'ba');
  5. Insert Into A Values (3,'ca');
  6. Insert Into A Values (4,'da');
  7. Insert Into B Values (1,'a');
  8. Insert Into B Values (2,'bba');
  9. Insert Into B Values (3,'ca');
  10. Insert Into B Values (5,'dda');
  11. Insert Into B Values (6,'Eda');
复制代码
假设表A为原始表,表B为比较表:
--原始表A与比较表B的增量差异(原始表A有、比较表B没有)
Select * from A minus select * from B;



--比较表B与原始表A的增量差异(比较表B有、原始表A没有)
Select * from B minus select * from A;



--两种增量差异的合集:此合集包含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
Select B1,B2,2 t from (Select * from B minus select * from A);




最后,实现判别出比较表相对于原始表是进行了“插入”、“修改”、“删除”的情况
--SUM(T)为1的为“删除”的数据,SUM(T)为2的为“新增”的数据,SUM(T)为3的为“修改”的数据
Select A1, sum(t)
  from (Select A1, A2, 1 t
          from (Select * from A minus select * from B)
        union
        Select B1, B2, 2 t
          from (Select * from B minus select * from A))
Group by A1;




作者: 王爱东    时间: 2020-3-12 16:34
这个很多地方能用到的。需要掌握。
作者: 王爱东    时间: 2020-3-12 16:35
两个表比较数据差异,这些方法就好用。
作者: 万望    时间: 2020-3-12 17:32

作者: 陈晓龙    时间: 2020-3-12 18:56
找差异吗?
作者: 张兴康    时间: 2020-3-13 16:52
陈晓龙 发表于 2016-4-12 18:56
找差异吗?

个人感觉这东西很实用
作者: 陈晓龙    时间: 2020-3-13 21:49
张兴康 发表于 2016-4-13 16:52
个人感觉这东西很实用

是呢。同感!
作者: 张兴康    时间: 2020-3-14 13:32
陈晓龙 发表于 2016-4-13 21:49
是呢。同感!






欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://p.delit.cn/) Powered by Discuz! X3.2