您现在的位置是:首页
>
易语言记录集查找 通过SELECT语句实现两个记录集的比较
通过SELECT语句实现两个记录集的比较 前言 在程序设计过程中 往往遇到比较两个记录集的差异 如 判断原来传入的订单资料与后来传入的订单资料之间的差异 并且将差异的数据显示给用户 实现
通过SELECT语句实现两个记录集的比较

前言 在程序设计过程中 往往遇到比较两个记录集的差异 如 判断原来传入的订单资料与后来传入的订单资料之间的差异 并且将差异的数据显示给用户 实现的方式有多种 如编程存储过程返回游标 在存储过程中对两批数据进行比较 等等 当然返回差异数据的方式多种多样 既可以是游标 又可以临时表或其它方式 本文主要论述利用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函数的认知 lishixinzhi/Article/program/Oracle/201311/17436
很赞哦! (1028)
- 上一篇
合同一式三份自己没有 英语谁知道一式两份,一式三份。到十份,怎么说啊
英语谁知道一式两份,一式三份。到十份,怎么说啊 英语谁知道一式两份,一式三份。到十份,怎么说啊一式两份du licate一式三份tri licate一式四份quadru licatio 一式五份qui
- 下一篇
java编写程序:输入一个学生的成绩,给出相应的等,(用switch语句实现:0-59:D 60-69:C 70-84:B 85-100:A!
java编写程序:输入一个学生的成绩,给出相应的等, 用 witch语句实现:0-59:D 60-69:C 70-84:B 85-100:A java编写程序:输入一个学生的成绩,给出相应的等, 用
相关文章
- 专四词汇辨析题 词汇精选:data的用法和辨析
- 表示看的词语2个字 分析(词语)详细资料大全
- 排比拟人的句子摘抄大全 当机立断造句
- 2个excel筛选相同姓名 excel里面怎么搜索某个内容 有很多人名,怎么快速找到我要找的名字
- 行列怎么区分 行列输入法详细资料大全
- 存款查询函 (函式高手请进)如何用函式查询某一个词语在EXCEL的一列中,第n次出现位置
- 对关键字序列进行堆排序 排序 - 选择排序 - 堆排序(一)
- 单元格含有某个字符 请教EXCEL中,查找并统计多个单元格中含有某一字符的和。谢谢!
- 词语分类的方法有哪些 偶尔(词语)详细资料大全
- 筛选包含多个关键字 WPS同一列只能同时筛选两个关键词吗
爱学记

微信收款码
支付宝收款码