Abfrage über zwei Tabellen?



  • Hallo Leute,
    erst mal die Fakten: Ich verwende SQL Server 2005. Ich habe in meiner DB zwei Tabellen: t_eingabe und t_massnahme. Hier die relevanten Felder:

    In t_eingabe gibt es das Feld id, Ereignis.
    In t_massnahme gibt es id, Massnahme

    Mein SQL-String sollte folgendes Ergebnis bringen: Zeige mir alle Massnahme aus t_massnahme die eine reverenz zu Ereignis='Unfall' aus t_eingabe haben.

    Es kann mehrere Massnahmen zu einem Ereignis geben (n-->1).

    Ich bekomme es einfach nicht mehr hin 😞

    Gruß Torsten



  • Das sollte mit einem (inner?) Join gehen.

    So in der Art:

    SELECT Massnahme 
    FROM t_massnahme INNER JOIN t_eingabe
    ON (t_massnahme.id = t_eingame.id)
    WHERE t_eingabe.Ereignis = "Unfall"
    


  • Imho fehlt in einer Tabelle der Fremdschlüssel.

    Ein Ereignis kann mehrere Maßnahmen haben.
    Eine Maßnahme gehört immer genau zu einem Ereignis.

    TABLE Ereignis: ID, Name
    TABLE Massnahme: ID, Name, EreignisID
    

    Dann kannst du das zugehörige SELECT schreiben:

    SELECT m.*
    FROM Massnahme m
    INNER JOIN Ereignis e ON e.ID = m.EreignisID
    WHERE e.Name = "Unfall"
    

    BTW: Referenz

    MfG SideWinder



  • Hi,
    ich habe beide Varianten ausprobiert, doch leider wird nur ein Datensatz ausgegeben. Als Ergebnis möchte ich ALLE Maßnahmen zu ALLEN Ereignissen (Unfall) sehen.

    z.B.:
    Ereignis 1 --> Maßnahme 1.1, Maßnahme 1.2
    Ereignis 2 --> Maßnahme 2.3, Maßnahme 2.4
    usw.

    Also, alle Maßnahmen zu allen Unfällen.

    Gruß Torsten



  • Achso, ich dachte du willst nur die Maßnahmen zum speziellen Ereignis "Unfall" sehen.

    Dann mach einfach die WHERE-Klausel in meinem Query weg. Dann bekommst du ein solches Ergebnis:

    Ereignis 1 - Maßnahme 1.1
    Ereignis 1 - Maßnahme 1.2
    Ereignis 2 - Maßnahme 2.3
    Ereignis 2 - Maßnahme 2.4

    Ein Ergebnis wie du es hast, mit einer Liste als Feld ist nicht möglich. Es kommt immer eine Tabelle heraus. Es ist aber kein Problem in einer Programmiersprache das in die Form Key->List die du gerne hättest umzuwandeln.

    MfG SideWinder



  • Hi SideWinder,
    mit meiner kleinen Liste wollte ich eigentlich nur ausdrücken, das es jeweils zu einem Ereignis mehrere Maßnahmen geben kann, sorry.

    Ich habe aber mein Problem mit Deiner Lösung gelöst. Und zwar so:

    SELECT m.* FROM t_Massnahme m
    INNER JOIN t_eingabe e ON e.ID = m.Massnahme_ID
    WHERE e.Ereignis = 'Unfall'
    

    Klappt wunderbar!!! 👍

    Vielen Dank


Anmelden zum Antworten