SQL:嵌套SELECT中缺少右括号

时间:2017-10-26 14:02:00

标签: sql oracle

我的代码如下所示:

...
LEFT JOIN
(
    SELECT *
    FROM REI_COUNTRY_CURRENCY T_CC
    WHERE T_CC.AS_FROM_DATE =
    (
        SELECT MAX(T2_CC.AS_FROM_DATE)
        FROM REI_COUNTRY_CURRENCY T2_CC
        WHERE T2_CC.COUNTRY_ID = T_CC.COUNTRY_ID
    ) T
) CC
ON C.COUNTRY_ID = CC.COUNTRY_ID
...

我不明白为什么它会说“缺少右括号”。 所有括号都是配对的。

1 个答案:

答案 0 :(得分:2)

子查询不需要/允许使用别名:

LEFT JOIN
(
    SELECT *
    FROM REI_COUNTRY_CURRENCY T_CC
    WHERE T_CC.AS_FROM_DATE =
    (

        SELECT MAX(T2_CC.AS_FROM_DATE)
        FROM REI_COUNTRY_CURRENCY T2_CC
        WHERE T2_CC.COUNTRY_ID = T_CC.COUNTRY_ID
    )                                            -- Remove the T from this line
) CC
ON C.COUNTRY_ID = CC.COUNTRY_ID

或者,要摆脱相关的子查询:

LEFT JOIN
(
    SELECT *
    FROM   (
      SELECT T_CC.*,
             RANK() OVER (
               PARTITION BY Country_ID
               ORDER BY     AS_FROM_DATE DESC
             ) AS rn
      FROM REI_COUNTRY_CURRENCY T_CC
    )
    WHERE rn = 1
) CC
ON C.COUNTRY_ID = CC.COUNTRY_ID