最近遇到几个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语法提供一下啊,不是随便在网上找的那种
最好是简单易懂并且全面的资料。如果问题解决了,可以另开帖送分~~ 大家帮忙啊!!!!
现在遇到的问题是用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语法提供一下啊,不是随便在网上找的那种
最好是简单易懂并且全面的资料。如果问题解决了,可以另开帖送分~~ 大家帮忙啊!!!!
解决方案 »
- 如何将access中的数据导入oracle数据库?
- 两个服务器oracle中表格的insert into table select * from anothertable;
- Oracle10g recycle bin的問題
- orcale用存储过程导出.dmp格式数据,即存储过程实现数据备份怎么做(急!)
- 求教一条sql语句
- 请教:ASP访问Oracle
- 急,这样的SQL语句怎么写?我知道sqlserver但不知道oracle
- 小弟初学,请问这个存储过程哪错了
- About Sequence!
- 我已经成功新建了一个数据库,怎么在enterprise manager里查看呢?
- ORACLE写入问题。
- nvl与no_data_found的使用??
2.B2.b = '001'可改为 B2.b(+) = '001'
可以写得完全一点嘛? 不太明白
如果写成B2.b(+) = '001' 不是和left join重复了么?
其他的没有错误。
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
这样有错么?