服务器之家

服务器之家 > 正文

oracle join on 数据过滤问题

时间:2019-11-05 15:14     来源/作者:oracle教程网

代码如下:


select a.f_username 
from 

SELECT /*+parallel(gu,4)*/distinct gu.f_username 
FROM t_base_succprouser gu 
where gu.f_expectenddate > (select trunc(sysdate,'Y')FROM DUAL) 
and gu.f_lotid=1 
and gu.f_playid=4 
and gu.f_paymoney>=1500 
) A 
left join 

select 
from t_base_vip_customes 
and ((vu.f_passeddate is null ) or (vu.f_passeddate > trunc(sysdate,'Y') )) 
and ((vu.f_lotid is null ) or (vu.f_lotid=1)) 
and ((vu.f_playid is null ) or (vu.f_playid=4)) 
and ((vu.f_condtionid is null ) or (vu.f_condtionid=3)) 
)B 
on A.f_username=B.f_usernam 
where b.f_username is null 


采用下面的语句 只能查出部分用户 

复制代码代码如下:


SELECT /*+parallel(gu,4)*/distinct gu.f_username 
FROM t_base_succprouser gu 
left join t_base_vip_customes VU on gu.f_username=vu.f_username 
gu.f_expectenddate > (select trunc(sysdate,'Y')FROM DUAL) 
and gu.f_lotid=rec_viplotplay.f_lotid 
and gu.f_playid=rec_viplotPlay.f_Playid 
and gu.f_paymoney>=rec_viplotPlay.F_Conditon_ValuesA 
and ((vu.f_passeddate is null ) or (vu.f_passeddate > trunc(sysdate,'Y') )) 
and ((vu.f_lotid is null ) or (vu.f_lotid=rec_viplotplay.f_lotid)) 
and ((vu.f_playid is null ) or (vu.f_playid=rec_viplotPlay.f_Playid)) 
and ((vu.f_condtionid is null ) or (vu.f_condtionid=rec_viplotPlay.F_CondtionID)) 
and vu.f_username is null 


执行计划: 

复制代码代码如下:


SELECT STATEMENT, GOAL = ALL_ROWS 
HASH UNIQUE 
NESTED LOOPS OUTER 
PARTITION RANGE ALL 
TABLE ACCESS FULL Object name=T_BASE_SUCCPROUSER 
VIEW 
FILTER 
TABLE ACCESS FULL Object name=T_BASE_VIP_CUSTOMES 
FAST DUAL 


后来改成了下面就能全部查出来了 

复制代码代码如下:


SELECT /*+parallel(gu,4)*/distinct gu.f_username 
FROM t_base_succprouser gu 
left join t_base_vip_customes VU on gu.f_username=vu.f_username 
and ((vu.f_passeddate is null ) or (vu.f_passeddate > trunc(sysdate,'Y') )) 
and ((vu.f_lotid is null ) or (vu.f_lotid=rec_viplotplay.f_lotid)) 
and ((vu.f_playid is null ) or (vu.f_playid=rec_viplotPlay.f_Playid)) 
and ((vu.f_condtionid is null ) or (vu.f_condtionid=rec_viplotPlay.F_CondtionID)) 

where gu.f_expectenddate > (select trunc(sysdate,'Y')FROM DUAL) 
and gu.f_lotid=rec_viplotplay.f_lotid 
and gu.f_playid=rec_viplotPlay.f_Playid 
and gu.f_paymoney>=rec_viplotPlay.F_Conditon_ValuesA 
and vu.f_username is null 
执行计划: 
SELECT STATEMENT, GOAL = ALL_ROWS 
HASH UNIQUE 
FILTER 
NESTED LOOPS OUTER 
TABLE ACCESS BY GLOBAL INDEX ROWID Object name=T_BASE_SUCCPROUSER 
INDEX RANGE SCAN Object name=IX_BASE_PROUSER_LOWEX 
FAST DUAL 
VIEW 
TABLE ACCESS FULL Object name=T_BASE_VIP_CUSTOMES 


oracle 不懂先把数据给过滤掉然后在来连接吗? 太笨了!而且这样把符合条件的数据也过滤掉了

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
返回顶部