2016-10-25 41 views
-1

我使用下面的查詢:缺少右括號,而在Oracle數據庫中查詢

Select identifier 
from batch_instance 
where batch_class_id IN (Select id 
          from batch_class 
          where ROWNUM <2 AND 
          batch_class_name='abc' 
          ORDER BY creation_date DESC); 

PFB錯誤:

ERROR位於第1行: ORA-00907:缺少右括號

+0

在子查詢中不能有'order by' - 只是刪除它。 ([可能的重複](http://stackoverflow.com/q/21859866/266304),雖然不是最清晰的問題;我會繼續尋找...) –

+0

此外,將通過如此子查詢沒有返回'abc'的最新ID – Kacper

+1

無論如何,如果您想要決定使用batch_class中的哪兩行,構造函數是錯誤的。 [這個答案](http://stackoverflow.com/a/28451660/266304)可能會指出你在正確的方向。 –

回答

1

子查詢(假設它是固定的)將只返回一行。所以它只返回一個id。在這種情況下,使用IN條件沒有意義,「相等」的比較會產生相同的效果。

要選擇與名稱'abc'相關聯的最近id,您可以用keep (dense_rank last)所以它仍然是一個子查詢全部完成 - 你將不再需要嵌套子查詢。類似於:

select identifier 
from batch_instance 
where batch_class_id = (select max(id) keep (dense_rank last order by creation_date) 
          from batch_class 
          where batch_class_name = 'abc' 
         ) 
;