• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    oracle join on 数据过滤问题
    复制代码 代码如下:

    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 不懂先把数据给过滤掉然后在来连接吗? 太笨了!而且这样把符合条件的数据也过滤掉了
    上一篇:oracle sys_connect_by_path 函数 结果集连接
    下一篇:Oracle 当前用户下所有表的记录总数
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    oracle join on 数据过滤问题 oracle,join,数据,过滤,问题,