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

Daten aus Fremdschlüsseltabellen abragen

Dieses Thema im Forum "Oracle" wurde erstellt von Disco_Stu, 8 Februar 2013.

  1. Disco_Stu

    Disco_Stu Neuer Benutzer

    Hi,

    ich bin neu hier und muss gestehen, dass ich ein absoluter Anfänger im Bereich Datenbanken bin.

    Aktuell versuche ich mir eine Abfrage zu basteln, mit der ich Daten aus mehreren verbundenen Tabellen abfragen kann.

    Definiert sind u.a. folgende Tabellen:

    Fahrzeug
    ID_MODELL -> PK
    ID_HERSTELLER -> FK
    BEZEICHNUNG

    Hersteller
    ID_HERSTELLER -> PK
    NAME

    Nun möchte ich durch eine Abfrage der Modell_ID den Namen des Herstellers und die Bezeichnung des Fahrzeugs ausgeben:

    [​IMG]

    Jetzt wird mir folgendes ausgegeben:

    Fahrzeug ID: 1001
    Hersteller: Volkswagen
    Modell: Golf
    Hersteller: Opel
    Modell: Golf

    Wie kann ich die Abfrage gestalten, damit ich nur den Hersteller des ausgewählten Fahrzeugs angezeigt bekomme und nicht alle angelegten Hersteller?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Weil Du einen CROSS JOIN machst, Dir fehlt die JOIN-Condition. Guggst Du konkret krass:

    Code:
    test=*# select * from fahrzeug ;
     id_modell | id_hersteller | bezeichnung
    -----------+---------------+-------------
             1 |             1 | golf
             2 |             2 | astra
    (2 rows)
    
    Time: 0,114 ms
    test=*# select * from hersteller ;
     id_hersteller | name
    ---------------+------
                 1 | vw
                 2 | opel
    (2 rows)
    
    Time: 0,101 ms
    test=*# select name, bezeichnung from fahrzeug , hersteller where fahrzeug.id_modell = 1;
     name | bezeichnung
    ------+-------------
     vw   | golf
     opel | golf
    (2 rows)
    

    Besser:

    Code:
    test=*# select name, bezeichnung from fahrzeug left join hersteller on fahrzeug.id_hersteller=hersteller.id_hersteller where fahrzeug.id_modell = 1;
     name | bezeichnung
    ------+-------------
     vw   | golf
    (1 row)
    
    Was Du noch verbessern solltest:

    • keine Bilder einfügen, sondern Code-Bereiche
    • Eingabeparameter prüfen, und bei Weitergabe an die DB escapen. Oder prepared Statements verwenden. Du öffnest SQL-Injections sämtliche Tore


    Andreas
     
    PLSQL_SQL gefällt das.
  3. Disco_Stu

    Disco_Stu Neuer Benutzer

    Super, vielen Dank für die schnelle und ausführliche Antwort. Die Abfrage funktioniert wunderbar.

    Ich hatte die Code Funktion ganz übersehen und daher umständlich mit dem Screenshot hantiert.

    Deine Anmerkungen werde ich berücksichtigen, danke nochmal :D
     
Die Seite wird geladen...

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