Sql 子查询Oracle的外部联接问题

Sql 子查询Oracle的外部联接问题,sql,oracle,subquery,outer-join,Sql,Oracle,Subquery,Outer Join,我浏览了这个问题的解决方案,不幸的是没有得到任何帮助。这里我得到了“列可能没有外部连接到子查询”的问题。Afaik With子句在这里没有帮助,因为这里的子查询引用表B.PFB,这是issue语句的摘录 SELECT * FROM ( ( A a1 JOIN A a2 ON a1.temp = a2.temp1 ) JOIN C c1 ON c1.column1 = a2.column1 AND c1.column2 = a2.colum

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

    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
    ) ;

提前感谢。

我不知道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;

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

我对分析函数不太熟悉。非常感谢。它很有效。