【问题标题】:ORA-00907: missing right parenthesis but I have matching pairs [duplicate]ORA-00907: 缺少右括号,但我有匹配的对 [重复]
【发布时间】:2019-02-15 17:18:54
【问题描述】:

我在此查询中收到缺少右括号的错误。我在这里错过了什么,我看到了 5 个左括号和 5 个右括号。我要做的是只返回具有最新日期的行。

WITH snCTE AS 
(
   SELECT
    T1.column1
    ,T1.column2
    ,T2.column3
    ,T2.column4
    ,T1.datefield
    ,ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY datefield DESC) AS RN
    FROM dBtable1 T1
    LEFT OUTER JOIN dBtable2 T2 ON (T1.columnid=T2.columnid AND T1.otherfield=T2.otherfield)
    WHERE EXISTS (SELECT 1 FROM dbtable3 AS T3 WHERE T3.column1 = T1.column1)
)

SELECT column1, column2, column3, column4, datefield
FROM snCTE
WHERE snCTE.RN = 1

【问题讨论】:

    标签: sql oracle ora-00907


    【解决方案1】:

    错误信息具有误导性;真正的问题是Oracle不支持AS在表别名中,但只支持列,所以

    FROM dbtable3 AS T3
    

    应该编辑成

    FROM dbtable3 T3
    

    例如:

    SQL> select 1 as ONE from dual;
    
           ONE
    ----------
             1
    
    SQL> select 1 as ONE from dual D;
    
           ONE
    ----------
             1
    
    SQL> select 1 as ONE from dual as D;
    select 1 as ONE from dual as D
                                 *
    ERROR at line 1:
    ORA-00933: SQL command not properly ended
    

    【讨论】:

      【解决方案2】:

      错误ORA-00907的来源是在FROM dbtable3 AS T3中使用AS, 因为,在 Oracle DB 中不允许使用 AS 为 表 或 子查询 起别名。

      所以,只需删除 AS 关键字。

      【讨论】:

      • 天哪,这实际上是一种误导。我已经删除了“as”并且错误消失了,非常感谢!现在我面临的列定义不明确,但我应该能够弄清楚这一点。谢谢!
      猜你喜欢
      • 2018-05-23
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多