Oracle中exists替代in語句

 你們都知道exists的速度要比in的速度快,也知道exists函數返回一個布爾值,也就是說exists函數裏最後要是 a.id =b.id相似這種方式結束。sql

例如:函數

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

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

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

上面是一張表的狀況下能夠這樣寫(爲了演示這裏我用了*,實際生產中不推薦你們寫*號),但有的時候,這個exists中須要的是一個固定的值,而不是一張表又要怎麼寫呢?blog

這裏,咱們能夠例用UNION關鍵字class

SQL UNION 操做符

UNION 操做符用於合併兩個或多個 SELECT 語句的結果集。數據類型

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

最後轉換成exists的語句爲:di

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)
相關文章
相關標籤/搜索