2016-03-07 169 views
0

我有這個疑問:SQL錯誤子查詢缺少右括號

SELECT rr.rate_value 
FROM rent_rate rr 
WHERE rr.item_id = 940 
AND rownum = 1 
ORDER BY rr.effective_on DESC 

它可以作爲一個獨立的查詢,但是當我插入,作爲一個子查詢到我的主查詢我得到一個錯誤,說我缺少一個右插入語。

SELECT 
c.id, 
(
    SELECT rr.rate_value 
    FROM rent_rate rr 
    WHERE rr.item_id = 940 
    AND rownum = 1 
    ORDER BY rr.effective_on DESC 
) AS the_rate 
FROM cages c 
WHERE c.id = 9009 
AND c.is_hidden = 'N' 
+1

Oracle不支持表的AS;嘗試與'...從tbl_name tbl ...' – Aleksej

+0

@Aleksej對不起,這只是我衝過來的問題。我實際上沒有'AS'作爲'FROM'子句。 –

+0

考慮到可能會像缺少paren一樣細微,請考慮將錯誤查詢直接粘貼到第二個代碼片段中,而不是提供已編輯的版本。 –

回答

3

我認爲更重要的是,查詢不會做你想做的。 rownum在之前過濾行order by處理它們。因此,您正在提取任意匹配的行,按列排序一行並在另一列中返回值。

這裏是計算什麼,我想你想一個辦法:

SELECT MAX(rr.rate_value) KEEP (DENSE_RANK FIRST ORDER BY rr.effective_on DESC) 
FROM rent_rate rr 
WHERE rr.item_id = 940 

無論這個版本或你的問題應該在括號之間做工精細的版本。

+0

我明白你說我的錯誤是什麼,但我不明白你的解決方案在做什麼。但嘿它有用!小心解釋發生了什麼? –

+1

'keep'獲得另一列排序的第一個值。這似乎是你想要做的。否則,你可以用兩個嵌套的子查詢來做同樣的事情。但是,Oracle不允許子子查詢中的關聯子句,所以'keep'是更簡單的方法。 –