Q.: Problem mit join über 3 Tabellen

Hi,

bin nmysql-Newbie.

Ich habe 3 Tabellen, die über jeweilige ID-Schlüssel miteinander verknüpft sind.

  1. Spieler: SpielerID, Name, Vorname, Strasse, PLZ, usw. (Primary Key= SpielerID)

  2. Verein: VereinsID, SaisonID, Vereinsname usw. (primary Key=VereinsID, key=SaisonID)

  3. Vereinszugehörigkeit: VereinszugehörigkeitID, VereinsID, SpielerID, usw. (key = SpielerID und VereinsID)

Meine Abfrage soll folgendes Ergebnis bringen:

  • Alle Spielerdaten (also die einfache Abfrage von Tabelle1)
  • Und den Vereinsnamen, der ja aber nur in Tabelle 3 steht und +ber die SpielerID über Tabelle 3, also der Vereinszugehörigkeitstabelle abgeleitet werden muß.

Wie müßte ich das die Abfrage gestalten?

Grüße, Q

  1. Servus,

    Wie müßte ich das die Abfrage gestalten?

    Gegenfrage: Wofür die Verknüpfungstabelle (3)? Kann ein Spieler in mehreren Vereinen gleichzeitig sein?

    Gruss
    Patrick

    --
    sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
    1. Gegenfrage: Wofür die Verknüpfungstabelle (3)? Kann ein Spieler in mehreren Vereinen gleichzeitig sein?

      Hallo Patrick,

      nein, das kann er in meinem Fall nicht. Hm. Gute Frage, warum ich das ausgegliedert habe. Ich sach ja, Newbie.

      Ich dachte halt, die Spieler gleich mit in die Vereinstabelle zu nehmen, würde unnötig Datenbalast mitschleppen??

      Grüße, Q.

    2. Mahlzeit,

      Gegenfrage: Wofür die Verknüpfungstabelle (3)? Kann ein Spieler in mehreren Vereinen gleichzeitig sein?

      Vielleicht nicht gleichzeitig ... aber - mittels entsprechenden Datumsfeldern - wäre so eine Art "Vereinshistorie" für jeden Spieler abbildbar. Vielleicht hat Q. sich ja so etwas dabei gedacht ...

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Vielleicht nicht gleichzeitig ... aber - mittels entsprechenden Datumsfeldern - wäre so eine Art "Vereinshistorie" für jeden Spieler abbildbar. Vielleicht hat Q. sich ja so etwas dabei gedacht ...

        Hi EKKI,

        das war tatsächlich einer der Gedanken. Wäre selber nicht mehr drauf gekommen. Danke fürs Gedankenlesen :-))

        Grüße, Q.

  2. Hallo,

    hast Du left joins versucht? Sollte so in etwa aussehen:
    SELECT Spieler.SpielerID, Spieler.Name, Spieler.Vorname, Spieler.Strasse, Spieler.PLZ, Verein.VereinsID, Verein.SaisonID, Verein.Vereinsname, Vereinszugehörigkeit.VereinszugehörigkeitID, Vereinszugehörigkeit.VereinsID, Vereinszugehörigkeit.SpielerID
    FROM Vereinszugehörigkeit
    LEFT JOIN Spieler ON (Vereinszugehörigkeit.SpielerID = Spieler.SpielerID)
    LEFT JOIN Verein ON (Vereinszugehörigkeit.VereinsID = Verein.VereinsID)

    *ohne Gewähr, nicht getestet und außerdem bin ich totmüde ;)

    Gruß,
    Manu

    --
    Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
    1. Hallo

      hast Du left joins versucht? Sollte so in etwa aussehen:

      Nein, LEFT JOIN ist hier nicht angebracht, sondern INNER JOIN.

      Freundliche Grüße

      Vinzenz

  3. Hallo

    Meine Abfrage soll folgendes Ergebnis bringen:

    • Alle Spielerdaten (also die einfache Abfrage von Tabelle1)
    • Und den Vereinsnamen, der ja aber nur in Tabelle 3 steht und +ber die SpielerID über Tabelle 3, also der Vereinszugehörigkeitstabelle abgeleitet werden muß.

    mein Artikel sollte Dir weiterhelfen.

    Freundliche Grüße

    Vinzenz

    1. mein Artikel sollte Dir weiterhelfen.

      Hallo Vinzenz,

      habs analog zu Deinem Beispiel umgesetzt und erhalte genau das Resultat, was ich möchte.

      Leider verstehe ich es trotzdem nicht ganz, warum das so funktioniert :-((

      SELECT
        SpielerName,
        SpielerVorname,
        VereinsName
      FROM Spieler
      INNER JOIN (Vereine
      INNER JOIN Vereinszugehoerigkeit
      ON Vereine.VereinsID = Vereinszugehoerigkeit.VereinsID)
      ON Spieler.SpielerID = Vereinszugehoerigkeit.SpielerID

      Grüße, Q.

      1. Hallo Q,

        mein Artikel sollte Dir weiterhelfen.

        habs analog zu Deinem Beispiel umgesetzt und erhalte genau das Resultat, was ich möchte.

        immerhin ein erster Erfolg.

        Leider verstehe ich es trotzdem nicht ganz, warum das so funktioniert :-((

        fang am besten bei Einführung in Joins von Rouven an - und arbeite Dich dann durch meine Fortgeschrittenen Jointechniken.

        Freundliche Grüße

        Vinzenz

        1. fang am besten bei Einführung in Joins von Rouven an - und arbeite Dich dann durch meine Fortgeschrittenen Jointechniken.

          Hi Vinzenz,

          das sollte ich nochmal nachhaltig machen. Den Artikel von Rouven hatte ich zwar schon gelesen, aber am besten mach ich mir mal ein paar Tabellen auf Kärtchen. Irgendwie verliere ich sehr schnell den Überblick, wenn ich die Tabellen nicht immer wieder beim Artikellesen gegenlesen kann.

          Grüße, Q.