Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

ORA-00904

Dieses Thema im Forum "Oracle" wurde erstellt von CHRYSCHTL, 13 Januar 2013.

  1. CHRYSCHTL

    CHRYSCHTL Benutzer

    Hey Leute,
    ich weiß einfach nicht warum er mir den Fehler bringt -.-
    Vll. kann mir ja jemand von euch helfen...

    CREATE VIEW Liebling AS

    SELECT C.first_name AS Kunden_Vorname, C.last_name AS Kunden_Nachname,
    A.first_name AS Actor_Vorname, A.last_name AS Actor_Nachname, A.actor_id, count(FA.film_id) AS Anzahl_der_Filme
    FROM Customer C, Rental R, Inventory I,Film_Actor FA, Actor A
    WHERE C.customer_id = R.customer_id
    AND R.inventory_id = I.inventory_id
    AND I.film_id = FA.film_id
    AND FA.actor_id = A.actor_id

    GROUP BY C.first_name, C.last_name,A.first_name, A.last_name, A.actor_id
    ORDER BY C.first_name, C.last_name, A.actor_id;

    SELECT T.Kunden_Vorname, T.Kunden_Nachname, T.Actor_Vorname, T.Actor_Nachname, T.actor_id, T.Anzahl_der_Filme
    FROM Liebling T
    JOIN (SELECT Kunden_Vorname, Kunden_Nachname, MAX(Anzahl_der_Filme) AS Maximale_Anzahl
    FROM Liebling
    GROUP BY Kunden_Vorname, Kunden_Nachname) X
    ON T.Kunden_Vorname = X.Kunden_Vorname
    AND T.Kunden_Nachname = X.Kunden_Nachname
    AND T.Anzahl_der_Filme = X.Maximale_Anzahl;
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Ohne jetzt Oraggle sonderlich gut zu kennen, aber laut Guugel ist die Fehlermeldung ein Hinweis auf ungültigen Bezeichner. Ich könnte mir vorstellen, daß es da knallt, wo Du auf X.<Spalte> zugreifst, denn ich sehe keine Definition für den Alias X, Du hast nur als Table-Alias T und Maximale_Anzahl.

    Andreas
     
  3. CHRYSCHTL

    CHRYSCHTL Benutzer

    Ne das ist legal mit dem X.
    Oracle nervt mit Kunden_Nachname und wenn ich das lösche dann ist Kunden_Vorname der Fehler
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja, hast Recht, hab das übersehen, X ist ja doch definiert. Sorry.

    Andreas
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Gerht denn ein "Select * from Liebling limit 3", also der View an sich?

    Andreas
     
  6. CHRYSCHTL

    CHRYSCHTL Benutzer

    jep das funkelt
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Hrm, strange. Ich habe den VIEW als Table nachgebaut:

    Code:
    test=*# \d liebling
            Table "public.liebling"
          Column      |  Type   | Modifiers
    ------------------+---------+-----------
     kunden_vorname   | text    |
     kunden_nachname  | text    |
     actor_vorname    | text    |
     actor_nachname   | text    |
     actor_id         | integer |
     anzahl_der_filme | integer |
    
    test=*# select t.kunden_vorname, t.kunden_nachname, t.anzahl_der_filme from liebling t join (select kunden_vorname, kunden_nachname, max(anzahl_der_filme) as maximale_anzahl from liebling group by 1,2) x on t.kunden_vorname=x.kunden_vorname and t.kunden_nachname=x.kunden_nachname and t.anzahl_der_filme=x.maximale_anzahl;
     kunden_vorname | kunden_nachname | anzahl_der_filme
    ----------------+-----------------+------------------
    (0 rows)
    
    Gut, da ist nix drin, aber es kommt kein Syntaxfehler oder so. An der Stelle weiß ich jetzt auch ned weiter, hab kein ORA sondern PostgreSQL, was aber recht ähnlich ist angeblich...


    Andreas
     
  8. CHRYSCHTL

    CHRYSCHTL Benutzer

    Problem gelöst ^^ ich hab einfach die Tabelle gelöscht und es nochmal probiert ;) dafür hab ich jetzt so viel zeit vergeudet -.-
    Wenn du Interesse hast, ich hab noch ein paar Aufgaben, die ich machen muss :D:D
     
  9. akretschmer

    akretschmer Datenbank-Guru

    LOL. Ist sowas typisch für Ora? *duck*

    Klar, aber Du scheinst meinen Stundensatz nicht zu kennen ...


    Andreas
     
  10. CHRYSCHTL

    CHRYSCHTL Benutzer

    oh nein ich bin doch nur ein armer Student ^^
    also dann mal los

    Geben Sie f¨ur jeden Kunden (first name, last name) und Kategorie (name) aus, wieviele
    Filme (Anzahl) er/sie sich aus dieser Kategorie ausgeliehen hat.Wenn er sich
    aus einer Kategorie bisher noch nichts ausgeliehen hat, dann geben Sie f¨ur diese
    Kombination Kunde-Kategorie die Anzahl 0 aus. Sortieren Sie die Ausgabe nach
    last name, first name (beide alphabetisch aufsteigend) und Anzahl (absteigend).

    meine Tabellen :
    Customer ( customer id, store id!Store, first name, last name, email,
    address id!Address, active, create date, last update)
    Film ( film id, title, description, release year, language id!Language,
    original language id!language, rental duration, rental rate, length,
    replacement cost, rating, special features, last update)
    Film Category ( film id!Film, category id!Category, last update)
    Inventory ( inventory id, film id!Film, store id!Store, last update)
    Rental ( rental id, rental date, inventory id!Inventory, customer id!Customer,
    return date, staff id!Staff, last update)
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Wenn Du Deine Aufgaben nicht selber löst, wirst Du zwar nicht Student bleiben, dafür aber arm.

    Also, mehr Eigeninitiative bitte!


    Andreas
     
  12. CHRYSCHTL

    CHRYSCHTL Benutzer

  13. CHRYSCHTL

    CHRYSCHTL Benutzer

    SELECT C.first_name, C.last_name, CA.name, count(FC.category_id) AS Anzahl
    FROM Customer C, Rental R, Inventory I,Film_Category FC, Category CA

    WHERE C.customer_id = R.customer_id
    AND R.inventory_id = I.inventory_id
    AND I.film_id = FC.film_id
    AND FC.category_id = CA.category_id
    Group by C.first_name,C.last_name, CA.name


    So, das ist der erste Teil. Weißt du zufällig wie das mit der Null gehen soll?
     
  14. akretschmer

    akretschmer Datenbank-Guru

    Ich denke, Dir ist bis jetzt die Funktion coalesce() unbekannt.

    Andreas
     
  15. CHRYSCHTL

    CHRYSCHTL Benutzer

    ne die sagt mir nichts. ich hätte an sowas wie CASE oder NVL gedacht aber das klappt leider nicht
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden