在Oracle中使用双嵌套选择左连接

时间:2013-04-30 10:40:57

标签: sql oracle left-join

我在这里建立了一个相当复杂的查询。它的工作是选择尚未批准的文档的所有细节(这很多工作),并返回文档引用列表和提交该文档的用户的名称。我当时想要做的是将表格左键加入到结果中,这样我就可以获得所有尚未在这些文档上注册批准的用户(这就是我在嵌套选择中所做的事情,即任何有approstatus ='的人待定',我需要确定需要添加哪些记录。

SELECT substr(m.xreference,1,instr(m.xreference,'/')-1) Proj,
       m.xreference,       
       m.xversion,
       a1.assignedtoname,
       a1.actiondate
FROM   documentapprovers a1,
       docmeta m,
       (SELECT DISTINCT a2.documentid
        FROM   documentapprovers a2
        WHERE  a2.approvalstatus = 'Pending') penders
WHERE  penders.documentid = a1.documentid
       AND m.did = a1.documentid
       AND a1.approverrole = 'Author'
       AND a1.approvertitle = 'Author'
       AND a1.actiondate <= SYSDATE - interval '3' month
ORDER  BY proj ASC, a1.assignedtoname DESC, m.xreference asc

我尝试在嵌套上面的查询时执行LEFT JOIN,如下所示:

SELECT a3.assignedtoname, a4.*
FROM (SELECT substr(m.xreference,1,instr(m.xreference,'/')-1) Proj,
               a1.documentid,
               m.xreference,       
               m.xversion,
               a1.assignedtoname,
               a1.actiondate
        FROM   documentapprovers a1,
               docmeta m,
               (SELECT DISTINCT a2.documentid
                FROM   documentapprovers a2
                WHERE  a2.approvalstatus = 'Pending') penders
        WHERE  penders.documentid = a1.documentid
               AND m.did = a1.documentid
               AND a1.approverrole = 'Author'
               AND a1.approvertitle = 'Author'
               AND a1.actiondate <= SYSDATE - interval '3' month) a4
LEFT JOIN documentapprovers a3
ON a3.documentid = a4.documentid

但是我收到命令未正确结束的错误。我一次又一次地看过它,似乎完全终止了我。有人可以帮忙吗?

请注意,这是Oracle的一个非常旧的版本,我认为是8i。

1 个答案:

答案 0 :(得分:1)

Oracle 8i非常非常老,在9i版本之前,ANSI连接不是语法的一部分。

尝试使用专有的Oracle外连接语法FROM a4, a3 WHERE a4.documentid = a3.documentid (+)