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错误,为什么?

解决方案 »

  1.   

    这是SQL 89的限制,写的非常清楚,一个表最多只能与另一个表进行外连接。
      

  2.   

    因为当第1次左外连接之后,其结果与第3个表之间,要进行全外连接。
    而SQL 89是不允许进行全外连接的。
      

  3.   

    刚才,有点怀疑自己的想法,所以在Oracle中做了一个测试,结果发现是可以的。
    估计是你的连接条件写的有问题,三个表只需要2个连接条件即可。
    考虑一下,是不是你的连接条件改一下。
      

  4.   

    楼上的写法和我其实不一样啊,先贴出原始完整的吧。
     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中时却报异常