注册 登录
编程论坛 Oracle论坛

请高人指点一下这两段sql的差别

sfcntop 发布于 2013-09-05 11:29, 983 次点击

select t.GLJG_DM, NVL(NSR.GLJG_DM, 0)
    from DB_DJGL.T_DJ_JGNSR NSR, db_rdgl.t_rd_szjdxx t
 where t.swglm = nsr.swglm(+)            
     and t.GLJG_DM = NSR.GLJG_DM(+)
     and nsr.swglm = 320800100005549;
查询结果:当GLJG_DM 无共同值时,无结果显示,
     
select t.GLJG_DM, NVL(NSR.GLJG_DM, 0)
    from DB_DJGL.T_DJ_JGNSR NSR, db_rdgl.t_rd_szjdxx t
 where t.swglm = nsr.swglm(+)            
     and t.GLJG_DM = NSR.GLJG_DM(+)
     and t.swglm = 320800100005549;   
查询结果:当GLJG_DM无共同值时,显示t 表中的GLJG_DM。
有点迷糊,求达人解答一下,如果该问题太幼稚,喷我,我加强学习。
1 回复
#2
周永2013-09-05 16:39
使用外连接(+),资料会以主表的准,关联的表没有找不到共同值,则以 NULL 形式体现。
两段语法上 ,主表是 T, 如果两个表没有共同值,查询结果中,T表栏位有值, NSR 表的栏位全部是 NULL, 加上 and nsr.swglm = 320800100005549; 当然就不会有结果了。
1