你們都知道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
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)