【问题标题】:outer join issue with sub query-Oracle子查询的外连接问题-Oracle
【发布时间】:2015-03-24 10:43:36
【问题描述】:

我浏览了此问题的解决方案,很遗憾无法获得任何帮助。在这里,我遇到了“列可能没有外部连接到子查询”的问题。 Afaik With 子句在这里没有帮助,因为这里的子查询引用表 B.PFB 是问题语句的摘录。

    SELECT *
    FROM ( ( A a1
    JOIN A a2
    ON a1.temp = a2.temp1 )
    JOIN C c1
    ON c1.column1  = a2.column1
    AND c1.column2 = a2.column2
    AND c1.column3   = a2.column3 )
    LEFT JOIN C c3
    ON c3.column1   = a2.column1
    AND c3.column2  = a2.column2
    AND c3.column3    = a2.column3
    AND c3.column4 =
    (SELECT MAX(c4.column4)
    FROM C c4
    WHERE c4.column1 = a2.column1
    AND c4.column2   = a2.column2
    AND c4.column3     = a2.column3
    ) ;

提前致谢。

【问题讨论】:

    标签: sql oracle subquery outer-join


    【解决方案1】:

    我没有意识到 Oracle 不支持 on 子句中的子查询。在这种情况下,您可以使用解析函数轻松解决问题:

    SELECT *
    FROM A a1 JOIN 
         A a2
         ON a1.temp = a2.temp1 JOIN
         C c1
         ON c1.column1 = a2.column1 AND
            c1.column2 = a2.column2 AND
            c1.column3 = a2.column3 LEFT JOIN
         (SELECT c3.*,
                 MAX(c3.column4) OVER (PARTITION BY c3.column1, c3.column2, c3.column3) as maxcol4
          FROM C c3
         ) c3
         ON c3.column1  = a2.column1 AND
            c3.column2 = a2.column2 AND
            c3.column3 = a2.column3 AND
            c3.column4 = c3.maxcol4;
    

    我猜你也可以在查询的其他地方使用分析函数来简化逻辑。

    【讨论】:

    • 我对分析函数不太感兴趣。非常感谢。它奏效了。
    猜你喜欢
    • 2016-01-28
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2010-11-15
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多