大家都知道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)
