【问题标题】:Oracle Missing Right ParenthesisOracle 缺少右括号
【发布时间】:2009-10-07 21:22:08
【问题描述】:

这是我的查询:

SELECT * FROM Auta WHERE SUBSTR(spz, 1, 2) = 
(SELECT SUBSTR(spz, 1, 2) FROM Auta WHERE typ = 'BMW' AND specifikacia_typu = 'Z1' LIMIT 1);

当我运行它时,我得到了这个错误:

ORA-00907: missing right parenthesis

我有点绝望,我已经尝试在查询中的任何地方添加括号,但我仍然得到错误?查询中有 3 个左括号和 3 个右括号,所以一切都应该没问题。

【问题讨论】:

    标签: sql oracle oracle10g ora-00907


    【解决方案1】:

    Oracle 中不存在 LIMIT 子句。相反,您将使用 rownum:

    SELECT *
      FROM Auta
     WHERE SUBSTR(spz, 1, 2) = (SELECT SUBSTR(spz, 1, 2)
                                  FROM Auta
                                 WHERE typ = 'BMW'
                                   AND specifikacia_typu = 'Z1'
                                   AND ROWNUM = 1);
    

    【讨论】:

    • 谢谢。我是 Oracle 的新手,我已经习惯了 MySQL 和 PostgreSQL :)
    • 您需要小心“ROWNUM = 1”语法。我不知道它是否适用于这种情况,但是从子查询返回的记录是不确定的——即每次运行查询时可能会返回不同的记录。如果您想要一致的返回,请使用“order by”将子查询包装在另一个子查询中。
    • @Nick:原始 LIMIT 1 的结果也是不确定的。反正没有 ORDER BY,所以我认为任何行都可以。
    【解决方案2】:

    “LIMIT 1”是干什么用的?我不相信这是正确的 Oracle 语法。如果您试图将输出限制为一行,请使用:

    WHERE rownum = 1

    【讨论】:

      【解决方案3】:

      据我所知,LIMIT 1 是 MySQL 主义。

        SELECT *
          FROM Auta
         WHERE SUBSTR(spz, 1, 2) =
               (SELECT SUBSTR(spz, 1, 2)
                FROM Auta
               WHERE typ = 'BMW'
                 AND specifikacia_typu = 'Z1'
                 AND ROWNUM = 1);
      

      ...应该会给你预期的结果

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 2019-05-08
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        • 2021-07-29
        • 2017-12-22
        • 1970-01-01
        相关资源
        最近更新 更多