2017-07-25 4 views
0

Ich habe diesen Code:Fehler: ORA-00905: fehlendes Stichwort

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 

Ich erhalte den Fehler Fehler: ORA-00905: fehlendes Schlüsselwort.

Danke für Ihre Hilfe!

+2

Der Parser drosselt auf dem 'as' vor' rental2'. Aus unbekannten Gründen erlaubt Oracle es nicht für Tabellenaliase, sondern nur für Spaltenaliase. – dnoeth

+0

Ich löschte es und jetzt bekomme ich den Fehler: ORA-00979: kein GROUP BY-Ausdruck –

+0

Alle Select-Spalten ohne Aggregatfunktion müssen in GROUP BY sein. Nur MyQL erlaubt seltsame Dinge wie Ihre aktuelle Anfrage. – dnoeth

Antwort

0

Änderung Ihrer GROUP BY zu

GROUP BY store_id, Titel_Film 

Wenn Gruppe mit durch, müssen Sie „Gruppenfelder“ für alle Felder angeben nicht zusammengefasst oder aggregiert werden.

0
  • wurde eine korrelierte Unterabfrage anstelle einer Inline-Ansicht verwendet, um das Inventar basierend auf dem Vorhandensein eines Vermietungsdatensatzes zu begrenzen. Existiert im Allgemeinen arbeitet schneller als in und wenn Sie keine Daten zurück, schneller als ein Join benötigt. Dadurch wurde auch die as-Anweisung für den Tabellenalias entfernt.
  • Ausgeschlossene Gruppe in der Inline-Ansicht.
  • Modifizierte Gruppe nach einer äußeren Abfrage, um alle nicht aggregierten Felder aus der Auswahl einzubeziehen.
  • verkürzte Aliase

.

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