Oracle中exists替代in語句


 大家都知道exists的速度要比in的速度快,也知道exists函數返回一個布爾值,也就是說exists函數里最后要是 a.id =b.id類似這種方式結束。

例如:

SELECT *
FROM TBL_REBATE_DAY_COUNT
WHERE ID IN (1, 2, 3, 4, 5);

(假設TBL_ALGO_RECORD 表中有ID=1,2,3,4,5)常規的方式轉換成exists為

SELECT *
FROM TBL_REBATE_DAY_COUNT a
WHERE exists(SELECT *
             FROM TBL_ALGO_RECORD b WHERE a.ID = b.ID);

上面是一張表的情況下可以這樣寫(為了演示這里我用了*,實際生產中不推薦大家寫*號),但有的時候,這個exists中需要的是一個固定的值,而不是一張表又要怎么寫呢?

這里,我們可以例用UNION關鍵字

SQL UNION 操作符

UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。

最后轉換成exists的語句為:

SELECT *
FROM TBL_REBATE_DAY_COUNT t
WHERE exists(SELECT *
             FROM (SELECT 1 AS id FROM dual
                   UNION SELECT 2 FROM dual
                   UNION SELECT 3 FROM dual
                   UNION SELECT 4 FROM dual
                   UNION SELECT 5 FROM dual
                  ) tmp
             WHERE tmp.id = t.id)

 


免責聲明!

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



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