2009-10-07 62 views
0

这里是我的查询:甲骨文缺少右括号

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个右括号,所以一切都应该是正确的。

回答

7

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

谢谢。我是Oracle新手,我习惯于MySQL和PostgreSQL :) – 2009-10-07 21:32:29

+0

您需要注意“ROWNUM = 1”语法。我不知道它是否可以在这种情况下工作,但是从子查询返回的记录是不确定的 - 即每次运行查询时可能会返回不同的记录。如果您希望获得一致的返回结果,请将子查询包装到另一个带有“order by”的子查询中。 – 2009-10-13 13:24:25

+0

@Nick:原始LIMIT 1的结果也是不确定的。反正没有ORDER BY,所以我认为任何行都可以。 – 2009-10-13 13:48:44

3

什么是“LIMIT 1”?我不相信这是正确的Oracle语法。如果你想将输出限制为一个排,使用方法:

WHERE ROWNUM = 1

3

LIMIT 1是MySQLism,据我所知。

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

...应该得到预期的结果