Oracle 缺少右括号
Posted
技术标签:
【中文标题】Oracle 缺少右括号【英文标题】:Oracle Missing Right Parenthesis 【发布时间】: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 个右括号,所以一切都应该没问题。
【问题讨论】:
【参考方案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);
...应该会给你预期的结果
【讨论】:
以上是关于Oracle 缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章