oracle 比较两个sql的结果集

本文提供了多种方法来比较两个数据库结果集是否一致,包括通过数学比较、使用列表和映射进行对比、利用Oracle SQL查询以及通过group by和having子句进行一致性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考自 https://www.cnblogs.com/qingxinblog/p/4237394.html

 

一、

如果你这两个结果集都没有close,可以这样: 

rs.last(); 
rs2.last(); 
if (rs.getRow() != rs2.getRow()) { 
//记录数不等,即结果不等 

rs.first(); 
rs2.first(); 
while (rs.next() && rs2.next()) { 
if (Math.abs(rs.getFloat(2) - rs2.getFloat(2)) > 0.00000001) { 
//记录值不等 
break; 

}

二、

来自百度知道的网友回答

//结果集有5列(根据情况调整):empno, ename, sal, hiredate, deptno
 public static String []columns = {"empno", "ename", "sal", "hiredate", "deptno"};
 
 //结果集rs1和rs2, 判断rs1与rs2中是否有相同元素
 public static boolean hasSame(ResultSet rs1, ResultSet rs2) throws SQLException{
  List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
  List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
  int i;
  while(rs1.next()){
   Map<String, Object> map = new HashMap<String, Object>();
   for(i = 0; i < columns.length; i++){
    map.put(columns[i], rs1.getObject(columns[i]));
   }
   list1.add(map);
  }
  
  while(rs2.next()){
   Map<String, Object> map = new HashMap<String, Object>();
   for(i = 0; i < columns.length; i++){
    map.put(columns[i], rs2.getObject(columns[i]));
   }
   list2.add(map);
  }

  for(Map<String, Object> map: list1){
   if(list2.contains(map)){
    return true;
   }
  }
  
  return false;
 }
三、参考http://blog.youkuaiyun.com/terryhuang/article/details/8621021  重点摘录如下:

oracle 解决方案
  1. (select * from a1  
  2.  minus   
  3. select * from a2   
  4. )  
  5.  union all  
  6.  (select * from a2  
  7.  minus   
  8. select * from a1   
  9. )  

照这展开优化下

(A minus B)union (B minus A)    如果得到的结果是空,证明一致。

另外参考一下http://www.itpub.net/thread-1066538-1-1.html

四、

select Cause, Rate
from (
select Cause, Rate from A1
union all
select Cause, Rate from A2)
group by Cause, Rate 
having count(*) < 2

如果结果集为NULL,就可以判断该结果集是一致的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值