snorri: zwei Joins im gleichen Feld (MySQL 4)

Hi alle!

Gesetzt den vereinfachten Fall, ich habe eine Datenbank mit zwei Tabellen:

teilnehmer (id, name)
spiel (id_teilnehmer1, id_teilnehmer2, ergebnis)

Jeder Eintrag in "spiel" verknüpft also genau zwei Datensätze in "teilnehmer". Wenn ich nun eine Liste aller Spiele erstellen will, dann ist ...

SELECT * FROM spiel

... nicht sehr erhellend, weil ich von den beiden Personen jeweils nur die id, nicht aber den Namen angezeigt bekomme. Mit ...

SELECT teilnehmer.id AS teilnehmer1, spiel.teilnehmer2, spiel.ergebnis
     FROM teilnehmer, spiel
     WHERE spiel.id_teilnehmer1=teilnehmer.id

... wird mir immerhin ein Teilnehmer namentlich angezeigt. Den anderen kann ich aber nicht auf diese Weise hineinjoinen, weil das nicht mehr eindeutig definiert wäre;

SELECT teilnehmer.id AS teilnehmer1, teilnehmer.id AS teilnehmer2 [...]

Wie macht man sowas? Ohne PHP, meine ich, also in einem SQL-Statement ohe subqueries? Geht das überhaupt?

-- snorri

  1. Hallo,

    dann benutze doch Alias-Namen für die Tabellen

    SELECT *
      FROM spiel AS s, teilnehmer AS t1, teilnehmer AS t2
    ...

    Und vielleicht solltest du dir die korrekte syntaktische Schreibweise für JOINs angewöhnen:

    SELECT * -- oder welche Felder du hier auch immer ausgeben möchtest
      FROM spiel AS s
      INNER JOIN teilnehmer AS t1
        ON s.teilnehmer1Id = t1.Id
      INNER JOIN teilnehmer AS t2
        ON s.teilnehmer2Id = t2.Id

    Ciao, Frank

    1. Hi Frank,

      dann benutze doch Alias-Namen für die Tabellen

      Cool, das war genau das, was ich brauchte :-)

      Und vielleicht solltest du dir die korrekte syntaktische Schreibweise für JOINs angewöhnen:

      Macht das in der Praxis einen Unterschied?

      Danke!

      -- snorri

      1. yo,

        Und vielleicht solltest du dir die korrekte syntaktische Schreibweise für JOINs angewöhnen:

        Macht das in der Praxis einen Unterschied?

        frank hat sich da geirrt, syntaktisch ist beides erlaubt und auch richtig. aber deine schreibweise macht es schwieriger zu lesen. und lesbarkeit von code ist auch ein wichtiges kriterium.

        Ilja

        1. Hi,

          hab ein -re vergessen :)

          Macht es bei MySQL auch Unterschiede im Query Optimizer?

          Ciao, Frank

          1. yo Frank,

            Macht es bei MySQL auch Unterschiede im Query Optimizer?

            nein gar keinen, es werden letztlich alle bedingungen in die where klausel vom optimierer gezogen.

            Ilja