作为oracle菜鸟级选手,最近频繁在工作中看到同事在写sql的时候用到(+),例如:
select ......
from j1_di.di_swjg a, j1_sbf.SBF_JDXJM_TJ_FDQ_LJ b
where b.ssyf(+) = '202003'
and a.swjg_dm <> '00000000000'
and a.sj_swjg_dm = '00000000000')
and a.swjg_dm = b.swjg_dm(+)
and b.swjg_dm(+) = b.sjswjg_dm(+)
and a.swjg_bz = 'J'
and a.jcjg_bz != 'Y'
and a.swjg_dm not like '2%'
and a.yxbz = 'Y'
order by a.swjg_dm
之前我知道:
oracle的(+)是一种特殊的用法,标识外连接,放在两个表的主键关联上,没有(+)的一方表示主表,有(+)号的一方表示附表。
但是主键外的条件加上(+)我真的是第一次见(才疏学浅。。。),查了查才知道,两表关联的时候,附表的所有条件都得加(+)。
这么写留等同于:
select ...
from (select *
from j1_di.di_swjg
where swjg_dm <> '00000000000'
and sj_swjg_dm = '00000000000'
and swjg_bz = 'J'
and jcjg_bz != 'Y'
and swjg_dm not like '2%'
and yxbz = 'Y') a,
(select *
from j1_sbf.SBF_JDXJM_TJ_FDQ_LJ
where ssyf = '202003'
and swjg_dm = sj_swjg_dm) b