知识大全 通过SELECT语句实现两个记录集的比较

Posted 差异

篇首语:学向勤中得,萤窗万卷书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通过SELECT语句实现两个记录集的比较相关的知识,希望对你有一定的参考价值。

通过SELECT语句实现两个记录集的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   前言   在程序设计过程中 往往遇到比较两个记录集的差异 如 判断原来传入的订单资料与后来传入的订单资料之间的差异 并且将差异的数据显示给用户   实现的方式有多种 如编程存储过程返回游标 在存储过程中对两批数据进行比较 等等 当然返回差异数据的方式多种多样 既可以是游标 又可以临时表或其它方式   本文主要论述利用ORACLE的MINUS函数和OVER函数 直接通过视图实现两个记录集的比较      实现步骤    利用MINUS函数 判断原始表与比较表的增量差异<设 两个记录集分别以表的方式存在 为表A和表B 其中 A表为原始表 B表为后来产生的比较表 即要与A表进行比较的数据表>   增量差异指 A中存在的记录 哪些在B表中没有的 也就是说 A表的记录被修改或删除      利用MINUS函数 判断比较表与原始表的增量差异   即B表中存在的记录 哪些在A表中没有 也就是说 B表新增的或A表修改的记录      连接A B的增量差异表和B A的增量差异表 利用OVER函数判断数据重复的次数   如果数据重复次数为 则该记录的标识为 修改   如果数据重复次数为 且出现在A B的增量差异表中 则该记录的标识为 删除   如果数据重复次数为 且出现在B A的增量差异表中 则该记录的标识为 新增      实例演练    创建数据表和实例环境<设原始记录集为数据表A 比较记录集为数据表B 当然实际应用过程中 参与比较的通常是视图 不会是数据表>    测试环境配置   Drop Table a;   Drop Table b;   Create Table a(a Numeric( ) a Varchar ( ));   Create Table b(b nUMERIC( ) b VarChar ( ));   Insert Into a Values ( a );   Insert Into a Values ( ba );   Insert Into a Values ( ca );   Insert Into a Values ( da );   Insert Into b Values ( a );   Insert Into b Values ( bba );   Insert Into b Values ( ca );   Insert Into b Values ( dda );   Insert Into b Values ( Eda );   Commit;   Select * from a;   Select * From b;      创建比较视图   Create Or replace View VW_Test_Minus as     标识重复出现的次数(次数= >删除或新增 次数= >修改)     SELECT A        a        t A表/B表标识        ROW_NUMBER() OVER (PARTITION BY A ORDER BY A ) RN 记录重复次数      FROM       (         Select a a A表 T  查看A表存在 B表没有的记录(修改或删除)           from            (              (Select * from a )              Minus              (Select * From b)            ) a b         Union 联合A表与B表不相同的记录集         Select b b B表 T  查看B表存在 A表没有的记录(修改或新增)           from            (              (Select * from b )              Minus              (Select * From a)              ) b a        ) F;   /    比较结果集   Select a     a     T     Rn     Decode(Rn 标识记录变化       修改       Decode(T        A表 删除        新增 )) Mark     From VW_Test_Minus      Where Rn=(Select Count(*) From VW_Test_Minus V Where V a =VW_Test_Minus a )   ;    后记   许多DBA都特别痛恨那些希望通过一句SELECT语句来实现复杂用户需求的编码人员 使用MINUS和OVER函数来实现数据比较 在执行效率上 可能会存在问题   本文的目的 并不在于讨论程序运行的效率 而在于抛砖引玉 引起大家对OVER函数的重视和对MINUS函数的认知 cha138/Article/program/Oracle/201311/17436

相关参考

知识大全 SELECT语句选项

跟我学SQL:SELECT语句选项  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用ORDERB

知识大全 获取数据-SELECT语句(1)

SQL实战新手入门:获取数据-SELECT语句(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 获取数据-SELECT语句(2)

SQL实战新手入门:获取数据-SELECT语句(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 获取数据-SELECT语句(3)

SQL实战新手入门:获取数据-SELECT语句(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 获取数据-SELECT语句(4)

SQL实战新手入门:获取数据-SELECT语句(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 查询语句(SELECT)的优化

查询语句(SELECT)的优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这篇文章是基于In

知识大全 DB2 SELECT语句高级用法

DB2SELECT语句高级用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!1、创建结果表crea

知识大全 快速掌握MySQL数据库中SELECT语句[1]

快速掌握MySQL数据库中SELECT语句[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 快速掌握MySQL数据库中SELECT语句[2]

快速掌握MySQL数据库中SELECT语句[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 从一条select语句看Oracle数据库查询工作原理

从一条select语句看Oracle数据库查询工作原理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧