【问题标题】:Left join with double nested selects in Oracle在 Oracle 中使用双嵌套选择进行左连接
【发布时间】:2013-04-30 10:40:56
【问题描述】:

我在这里建立了一个相当复杂的查询。它的工作是选择尚未批准的文档的所有详细信息(这很有效),并向我返回文档参考列表和提交该文档的用户的名称。然后我想要做的是 LEFT JOIN 表到结果中,以便我获得所有尚未注册他们对这些文档的批准的用户(这是我在嵌套选择中所做的,即任何具有approvalstatus = ' Pending',我需要确定哪些记录需要添加。

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。

【问题讨论】:

    标签: sql oracle left-join


    【解决方案1】:

    Oracle 8i 非常非常古老,ANSI 连接直到版本 9i 才成为语法的一部分。

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

    【讨论】:

    • 太棒了!我怀疑这是因为我也无法让 JOIN 语句工作,但我认为我的代码中的错误比它不接受我习惯工作的 JOIN 更有可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多