2017-07-25 466 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