大家都知道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關鍵字
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)
SQL中如何使用EXISTS替代IN
我們在程式中一般在做sql優化的時候講究使用exists帶替代in的做法,理由是exists執行效率要比in高。之前我一直挺懵懂的一件事情是如何使用exists來替換in呢,二者表示的意義又是什麼呢?今天就我個人理解記錄一下 in表示範圍,指某一字段在某一範圍之內,這個範圍一般使用子查詢來獲取,由此...
SQL 怎麼用EXISTS替代IN
我們在程式中一般在做sql優化的時候講究使用exists帶替代in的做法,理由是exists執行效率要比in高。之前我一直挺懵懂的一件事情是如何使用exists來替換in呢,二者表示的意義又是什麼呢?今天就我個人理解記錄一下 in表示範圍,指某一字段在某一範圍之內,這個範圍一般使用子查詢來獲取,由此...
Oracle中exists與in區別
in 與 exist 的語法比較 select from 資料表 t where t.x in 括號內可以是符合t.x欄位型別的值集合,如 1 2 3 但如果t.x是number型別的時候,似乎這樣的寫法會出問題 也可以是通過另外的select語句查詢出來的值集合,如 select y from 資...