Oracle [not] exists 子查詢裡不存在與外層關聯的條件,最終結果有無資料的現象

maohaiqing0304發表於2015-05-22


標題:Oracle [not] exists 子查詢裡不存在與外層關聯的條件,最終結果有無資料的現象 

作者:lōττéry©版權所有[文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任.]


    前言:
    最近看到一個sql ,not exist 和 exists 子查詢裡不存在與外層關聯的條件;
    下文實驗結論為 不加關聯條件 有無資料的現象。


     實驗結論如下:
not exists  子查詢沒資料,最終結果行數等於外層結果行數
not exists  子查詢有資料,最終結果沒資料
exists        子查詢有資料,最終結果行數等於外層結果行數 
exists        子查詢沒資料,最終結果沒資料

     測試SQL:
          SELECT 1  FROM dual where [not] exists (select 1 from dual /*minus select 1 from dual*/);


      -- 如上的情況類似if判斷:
      -- 例如:當not exists 的整個子查詢結果有資料,update/delete 空操作,當子查詢無資料,update/delete 進行有值操作 
      --           可能if 判斷方式最佳化於原sql(原sql可能存在filter執行計劃)... 具體根據業務判斷。

      -- 當您碰到這樣情況,建議最好和開發人員確認下是否存在馬虎忘記寫關聯條件情況;
      -- 若就是想判斷再操作update/delete,個人建議用if...避免子查詢於外層迴圈操作.
     

  【源於本人筆記】 若有書寫錯誤,表達錯誤,請指正...


此條目發表在   SQL、SQL最佳化篇  分類目錄。將固定連線加入收藏夾。





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28602568/viewspace-1666675/,如需轉載,請註明出處,否則將追究法律責任。

相關文章