oracle数据库两表数据比较
本文轉(zhuǎn)自http://blog.sina.com.cn/s/blog_3ff4e1ad0100tdl2.html
1 引言
在程序設(shè)計(jì)的過(guò)程中,往往會(huì)遇到兩個(gè)記錄集的比較。如華東電網(wǎng)PMS接口中實(shí)現(xiàn)傳遞一天中變更(新增、修改、刪除)的數(shù)據(jù)。實(shí)現(xiàn)的方式有多種,如編程存儲(chǔ)過(guò)程返回游標(biāo),在存儲(chǔ)過(guò)程中對(duì)兩批數(shù)據(jù)進(jìn)行比較等等。
本文主要討論利用ORACLE的MINUS函數(shù),直接實(shí)現(xiàn)兩個(gè)記錄集的比較。
2 實(shí)現(xiàn)步驟
假設(shè)兩個(gè)記錄集分別以表的方式存在,原始表為A,產(chǎn)生的比較表為B。
2.1 判斷原始表和比較表的增量差異
利用MINUS函數(shù),判斷原始表與比較表的增量差異。
此增量數(shù)據(jù)包含兩部分:
1)原始表A有、比較表B沒(méi)有;
2)原始表A和比較表B都有,但是某些字段發(fā)生了改變。
2.2 判斷比較表與原始表的增量差異
利用MINUS函數(shù),判斷比較表與原始表的增量差異。
此增量數(shù)據(jù)包含兩部分:
1)比較表B有、原始表A沒(méi)有;
2)比較表B和原始表A都有,但是某些字段發(fā)生了改變。
2.3 得出結(jié)果集
利用SQL語(yǔ)句中的對(duì)兩種增量差異的處理,實(shí)現(xiàn)判別出比較表相對(duì)于原始表是進(jìn)行了“插入”、“修改”、“刪除”的情況。
3 實(shí)例演練
3.1創(chuàng)建表并插入數(shù)據(jù)
Create table A(A1 number(12),A2 varchar2(50));
Create table B(B1 number(12),B2 varchar2(50));
Insert Into A Values (1,'a');
Insert Into A Values (2,'ba');
Insert Into A Values (3,'ca');
Insert Into A Values (4,'da');
Insert Into B Values (1,'a');
Insert Into B Values (2,'bba');
Insert Into B Values (3,'ca');
Insert Into B Values (5,'dda');
Insert Into B Values (6,'Eda');
COMMIT;
3.2進(jìn)行增量差異數(shù)據(jù)比較
3.2.1原始表A與比較表B的增量差異
Select * from A minus select * from B;
結(jié)果如下:
?????????? A1?????????? A2
---------------------------------------------------------------
??????????? 2????????? ba
??????????? 4????????? da
3.2.2比較表B與原始表A的增量差異
Select * from B minus select * from A;
結(jié)果如下:
?????????? B1??????????? B2
---------------------------------------------------------------
??????????? 2??????????? bba
??????????? 5??????????? dda
??????????? 6??????????? Eda
3.2.3兩種增量差異的合集
此合集包含3類數(shù)據(jù):
--1、原始表A存在、比較表B不存在,屬于刪除類數(shù)據(jù),出現(xiàn)次數(shù)1
--2、原始表A不存在、比較表B存在,屬于新增類數(shù)據(jù),出現(xiàn)次數(shù)1
--3、原始表A和比較表B都存在,屬于修改類數(shù)據(jù),出現(xiàn)次數(shù)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);
結(jié)果如下:
?????????? A1?????????????????? A2?????????????? T
------------- -------------------------------------------------- ----------
??????????? 2?????????????????? ba??????????????? 1
??????????? 2?????????????????? bba?????????????? 2
??????????? 4?????????????????? da??????????????? 1
??????????? 5?????????????????? dda?????????????? 2
??????????? 6?????????????????? Eda?????????????? 2
3.3得到結(jié)果
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;
結(jié)果如下:
?????????? A1???? SUM(T)
-----------------------
??????????? 6????????? 2
??????????? 2????????? 3
??????????? 4????????? 1
??????????? 5????????? 2
結(jié)果中SUM(T)為1的為“刪除”的數(shù)據(jù),SUM(T)為2的為“新增”的數(shù)據(jù),SUM(T)為3的為“修改”的數(shù)據(jù)。
4 分析
4.1實(shí)現(xiàn)分析
在兩個(gè)結(jié)果集比較的過(guò)程中,減少原始表和比較表比較的字段數(shù)目以及原始表和比較表的數(shù)據(jù)量都可以提高效率。
5 總結(jié)
此比較方法在執(zhí)行效率上,可能不是非常好,但是能解決效率要求并不太高的問(wèn)題。在實(shí)現(xiàn)上利用了Oracle的minus函數(shù),此文在于引起大家對(duì)于Oracle函數(shù)的認(rèn)識(shí)。
轉(zhuǎn)載于:https://www.cnblogs.com/abc8023/p/4917583.html
總結(jié)
以上是生活随笔為你收集整理的oracle数据库两表数据比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jsp通过include指令引入html
- 下一篇: 非域环境下使用证书部署数据库(SqlSe