最近遇到几个SQL问题,解决不了。请大家帮忙啊1。left join和在where 里面写(+)的方式是不是有区别?区别在哪儿?
现在遇到的问题是用left join的写法可以解决,但是(+)不知道怎么解决
实现一:
select 
A.a,
B.b,
C.c,
C.d
from A
left join B on
A.a = B.b 
left join C on
A.a = C.c and
B.b = C.d
where 
A.a = '001'实现二
select 
A.a,
B.b,
C.c,
C.d
from A,B,C
where 
A.a = '001' and
A.a = B.b(+) and
A.a = C.c(+) and
B.b = C.d(+) 
这样会提示错误,请问用(+)的方式怎么写才能没有错误结果和实现一的一样?2。两个表A,B关联的时候,如果A里面的字段没有和B的关联上,那么用一个定值
和B关联,怎么实现好?现在的处理是
A.a,
DECODE(B1.b,NULL,B2.b,B1.b)
from A
left join B B1 on
A.a = B1.b 
left join B B2 on
B2.b = '001'
where 
0 = 0当然实际的SQL要比这复杂的多,关联的条件很多。所以最好是有别的处理方法。
3。谁有好的实用的SQL语法提供一下啊,不是随便在网上找的那种
最好是简单易懂并且全面的资料。如果问题解决了,可以另开帖送分~~ 大家帮忙啊!!!!

解决方案 »

  1.   

    1....
    2.B2.b = '001'可改为 B2.b(+) = '001'
      

  2.   

    to: wiler(@_@) 
    可以写得完全一点嘛? 不太明白
    如果写成B2.b(+) = '001' 不是和left join重复了么?
      

  3.   

    问题1的实现2有错误,错误是1个表不能和1个以上的表left~~~~~~~
    其他的没有错误。
      

  4.   

    select
    A.a,
    B.b,
    C.c,
    C.d
    from A,B,C
    where
    A.a = '001' and
    A.a = B.b(+) and
    A.a = C.c(+) and
    B.b = C.d
    这样有错么?