熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

慎用Oracle的notin

2013-11-13 22:18:11  來源: Oracle 

  幫財務人員處理數據一個是ERP系統中的賬面數據一個是稅務局給的官方數據一張EXCEL表想找出兩邊不匹配的數據

  據說EXCEL版本已經提供了這種比對的功能但無奈數據量太大操作起來巨慢如牛而WPS似乎還沒這個功能於是導入數據庫中新建一個表存儲這些數據來比對

  開始寫了個SQL來查詢稅務有而ERP系統中沒有的數據

  select * from tab_excel where taxcode not in

  (select erpcode from tab_excel)

  正常然後反過來查ERP中存在而稅務系統中不存在的數據

  select * from tab_excel where erpcode not in

  (select taxcode from tab_excel)

  返回條數據很奇怪然後馬上想到了是null的問題taxcode必然存在值為null的記錄oracle中和null比較的返回值是unkown所以才無法匹配

  於是修改SQL語句如下

  select * from tab_excel tout where not exists

  (select from tab_excel where taxcode=touterpcode)

  結果正常

  not in () 括號中的返回值不能存在null值是Oracle SQL開發的一條鐵律如果不能確定返回結果一定無null值還是改寫為not esists吧而且not in效率低下一般不能用到索引生產環境的程序最好不要使用


From:http://tw.wingwit.com/Article/program/Oracle/201311/18720.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.