關於“怎么比較兩個SQL查詢語句產生的結果集是否相同”搜集到的一些資料


一、

如果你這兩個結果集都沒有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.csdn.net/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,就可以判斷該結果集是一致的。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM