本来对oracle中的左右连接已经非常熟悉,但是看到项目中写的各式各样的连接自己也迷惑了(+﹏+)~。
摘出来,希望火眼金睛o(≧v≦)o~~的朋友指点一二。
先谢谢了O(∩_∩)O。
为了容易理解,简化了实际复杂的sql,但结构类似
问题1:
A文(项目使用的):
select AA.x,BB.y,CC.z
from AA,BB,CC
where AA.id1 = BB.id1(+) and
AA.id2 = BB.id2(+) and
BB.id1 = CC.id1(+) and
BB.id2 = CC.id2(+) and
AA.m = 'test'
B文:
select AA.x,BB.y,CC.z
from AA,BB,CC
where AA.id1 = BB.id1(+) and
AA.id2 = BB.id2(+) and
AA.id1 = CC.id1(+) and
AA.id2 = CC.id2(+) and
AA.m = 'test'
sql本身想以AA表作为主表查询,但在A文中偷换了主表,B文似乎没什么悬念。
想请教的是A文中移花接木的做法会产生问题么?
问题2:
C文(项目使用的):
select AA.x,BB.y,CC.z
from AA
left join BB on
AA.id1 = BB.id1 and
AA.id2 = BB.id2
left join CC on
BB.id1 = CC.id1 and
BB.id2 = CC.id2
where AA.m = ‘test’
D文:
select AA.x,BB.y,CC.z
from AA
left join BB on
AA.id1 = BB.id1 and
AA.id2 = BB.id2
left join CC on
AA.id1 = CC.id1 and
AA.id2 = CC.id2
where AA.m = ‘test’
也是AA表为主表,问题同上面的,C文的写法与D文相比会差生查询结果上的差异么?
如果觉得A文与C文是一样sql的不用写法,费眼回答一个就行。