Oracle两张表的数据比较
在某些情况下 我们会需要比较两张表的数据是否一样
假设有两张表A与表B它们的字段相同 但是当中的数据可能不同 而且有些字段的数据还有可能为空
方法一(手动) 把需要比较的两张表的数据按照某种规则排序后导出为xls 这里我直接用PL/SQL Developer导出
然后用把xls文件转换成txt文件 这里我用的是batconv转换公式
现在我们就有了两个txt文件
然后用beyond pare文件比较器比较内容
优点 数据差异一目了然 缺点 比较费时
方法二(通过Sql语句来比较)
创建表的语句 create table formula( id varchar ( ) primary key 自动生成的 唯一的 formulaName varchar ( ) formulaContent varchar ( ) formulaType varchar ( ) )
当中除id不为空 其它三项均可能为空
一般情况下我们可以用 select * from formula A where not exists (select * from formula B where A formulaName= B formulaName and A formulaContent=B formulaContent and A formulaType=B formulaType)
在oracle 情况下如果两张表的某个字段都为null则其通过A *=B *是比较不出来的
因此要额外加上这样的判断 or(A formulaContent is null and B formulaContent is null) or (A fomrulaName is null and B fomrulaName is null) or (A formulaType is null and B fomrulaType is null)
通过上面这个sql语句我们就可以找在A表中存在 但在B表中不存在的数据
反过来可以查询在B表中存在 但在A表中不存在的数据
若两个查询都为空 则说明两张表的相应字段完全相同
若这两张表在不同的数据库 则要通过建立DBLink
优点 数据比较快 特别是在数据量比较大的数据优势更加明显
lishixinzhi/Article/program/Oracle/201311/18808
2023-08-15 广告