2017-07-25 81 views
0

我有這樣的代碼:錯誤:ORA-00905:缺少關鍵字

select inventory.store_id as store_id, 
     film.title as Titel_Film, 
     count(film.film_id) as Anz_ausleihbar 
from film 
join inventory on film.film_id = inventory.film_id 
join (select rental.inventory_id, rental.return_date 
     from rental 
     group by rental.inventory_id) as rental2 
on rental2.inventory_id = inventory.inventory_id 
where film.title like '%B' 
and inventory.store_id = 1 
group by film.film_id 
order by inventory.store_id asc, film.title desc 

我得到的錯誤錯誤:ORA-00905:缺少關鍵字。

感謝您的幫助!

+2

語法分析器扼住''出租2'前的'as'。由於不知道的原因,Oracle不允許將其用於表別名,而僅用於列別名。 – dnoeth

+0

我刪除了它,現在我收到錯誤:ORA-00979:不是GROUP BY表達式 –

+0

所有沒有聚合函數的選擇列必須位於GROUP BY中。只有MyQL允許像當前查詢這樣的奇怪事情。 – dnoeth

回答

0

改變你的GROUP BY

GROUP BY store_id, Titel_Film 

當使用GROUP BY時,需要指定不被概括或聚合各領域的「組字段」。

0
  • 使用相關的子查詢而不是內聯視圖來基於租賃記錄的存在限制庫存。存在一般運行速度快於in,並且如果不需要返回數據,則會比聯接更快。這也刪除了表別名上的as語句。
  • 通過內聯視圖消除組。
  • 在外部查詢中修改group以包含select中的所有非聚合字段。
  • 縮短的別名

SELECT I.store_id as store_id 
    , f.title as Titel_Film 
    , count(f.film_id) as Anz_ausleihbar 
FROM film 
INNER JOIN inventory I 
    ON f.film_id = I.film_id 
WHERE f.title like '%B' 
    AND i.store_id = 1 
    AND exists (SELECT * 
       FROM rental r2 
       WHERE r2.inventory_ID = i.inventory_ID) 
GROUP BY I.store_id 
     , film.title 
ORDER BY i.store_id asc, f.title desc