左连接改成+的写法,出现ORA-01417: a table may be outer joined to at most one other table错误

theoffspring 2011-11-22 06:43:53

FROM
info2 info
LEFT OUTER JOIN question_list ql
ON info.enq_no = ql.enq_no
LEFT OUTER JOIN choice_list cl
ON info.enq_no = cl.enq_no
AND ql.question_no = cl.question_no

改成


from info2,question_list,choice_list
where
info.enq_no = ql.enq_no(+)
and info.enq_no = cl.enq_no(+)
AND ql.question_no = cl.question_no(+)

结果出现ORA-01417: a table may be outer joined to at most one other table错误,为什么?
...全文
1507 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
theoffspring 2011-11-22
  • 打赏
  • 举报
回复
楼上的写法和我其实不一样啊,先贴出原始完整的吧。


SELECT
FI.SVCID,
FI.GROUPNO,
FI.ENQUETENO,
QL.QUESTIONNO,
QL.QUESTION,
QL.QTYPE,
CL.CHOICENO,
CL.CHOICETXT,
FI.STARTDT,
FI.ENDDT
FROM
ENQFORMINFO2 FI ,ENQQUESTIONLST2 QL,ENQCHOICELST2 CL
WHERE
FI.SVCID = 'PUBFSOL_CENQ'
AND
FI.GROUPNO = 46
AND
FI.STARTDT < SYSDATE
AND
FI.ENDDT > SYSDATE
AND FI.ENQUETENO = QL.ENQUETENO(+)
AND FI.ENQUETENO = CL.ENQUETENO(+)
AND QL.QUESTIONNO = CL.QUESTIONNO(+)


你的sql和我的还不一样,你是A,B,C,B和C分别被左连到A表,而我的这个sql,左连C的时候,条件中带有了和A,B的关联条件,是不是这个导致的?在java中调用的时候没抛异常,能正常执行,但在pl/sql developer中时却报异常
我心飞翔 2011-11-22
  • 打赏
  • 举报
回复
刚才,有点怀疑自己的想法,所以在Oracle中做了一个测试,结果发现是可以的。


估计是你的连接条件写的有问题,三个表只需要2个连接条件即可。
考虑一下,是不是你的连接条件改一下。
theoffspring 2011-11-22
  • 打赏
  • 举报
回复
第一种写法的时候,不也和第二个表作左连接了吗

我心飞翔 2011-11-22
  • 打赏
  • 举报
回复
因为当第1次左外连接之后,其结果与第3个表之间,要进行全外连接。
而SQL 89是不允许进行全外连接的。
我心飞翔 2011-11-22
  • 打赏
  • 举报
回复
这是SQL 89的限制,写的非常清楚,一个表最多只能与另一个表进行外连接。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧