個人觀點,爲了更好的記憶:
'>' 表示快的意思
not exists > join > exist > in > disinct > not in
我發現distinct 也太慢了。
我想是因爲它要在結果集中遍歷的緣故。所以,儘量用join不要用distinct.
另外,a.name = b.name(+), 這個是與 from a left join b on a.name = b.name. 不同的。當a是null的時候,左聯不到a.
-- 一對多
-- distinct
SELECT distinct a.* FROM xe_wf_act_def a, xe_wf_act b WHERE a.wf_act_def_id = b.wf_act_def_id
-- exists
select a.* from xe_wf_act_def a where exists (select b.* from xe_wf_act b where a.wf_act_def_id = b.wf_act_def_id)
-- in
select a.* from xe_wf_act_def a where a.WF_ACT_DEF_ID in (select b.WF_ACT_DEF_ID from xe_wf_act b)
-- not exists
select a.* from xe_wf_act_def a where not exists (select b.* from xe_wf_act b where a.wf_act_def_id = b.wf_act_def_id)
-- not in
select a.* from xe_wf_act_def a where a.WF_ACT_DEF_ID not in (select b.WF_ACT_DEF_ID from xe_wf_act b)