个人观点,为了更好的记忆:
'>' 表示快的意思
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)