2009-10-07 65 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); 

...應該得到預期的結果