Snafu: MySQL > Problem mit JOIN ?!

Hallo!
Ich habe gerade 2h nach meinem Problem gesucht aber da ich nicht weiß, wie man es ausdrücken soll habe ich nichts gefunden.
Mein Problem ist folgendes:
Ich habe sagen wir mal 2 Tabellen (hier einfaches Beispiel)

Tabelle 1:
+------+------------+-----------------+
|..id..|..nickname..|.......email.....|
+------+------------+-----------------+
|...1..|...Foo......|...myfoo@aol.com.|
|...2..|...Bar......|...mybar@aol.com.|
|...3..|...Foobar...|..foobar@aol.com.|
|...x..|...XXX......|...XXXXXXXXXXXXX.|
+------+------------+-----------------+

Tabelle 2:
+------+-----------+----------+--------------------+
|..id..|.recipient.|..sender..|.......msg..........|
+------+-----------+----------+--------------------+
|..xx..|......x....|.......X..|..XXXXXXXXXXX.......|
|..24..|......1....|.......2..|..Hallo, wie gehts?.|
|..34..|......2....|.......3..|..Mhmm Pie!!!.......|
|..xx..|......x....|..........|..XXXXXXXXXXX.......|
+------+-----------+----------+--------------------+

Ich will nun mit einer SQL-Abfrage die Tabelle 2 wie folgt auslesen:
id, recipient->nickname, sender->nickname, msg
Ich schaffe es, dass eine id (sender/recipient) durch den nickname ersetzt wird und zwar mit folgendem SQL-Query (sollte zumindest gehen, mein Hirn ist im Moment Matsch. Vielleicht is folgendes QRY nur Blödsinn).

SELECT a.id, b.nickname, a.sender, a.msg FROM tabelle2 AS a LEFT JOIN tabelle1 ON a.id = b.id

Wie kann ich jetzt a.sender auch durch b.nickname (allerdings den mit der id von a.sender) ersetzen?

MfG,
Snafu

  1. Hi,

    JOIN Syntax geht anders. Grundsätzlich musst Du angeben on LEFT oder RIGHT, INNER oder OUTER JOIN.

    Beispiel LEFT OUTER JOIN

    SELECT name.tabX, addr.tabY FROM tabX LEFT OUTER JOIN tabY ON primary_key.tabX = foreign_key.tabY

    --roro

  2. Hello,

    dein Problem ist, dass du es hier nicht mit einer klassischen Beziehung zwischen 2 Tabellen zu tun hast, sondern ja eigentlich mit 2,5 Tabellen - warum? Weil deine tabelle2 über 2 Felder mit der tabelle1 in Beziehung steht.
    Dein Ansatz zum Join beruhte auf grundsätzlich richtiger Syntax aber falscher Logik.
    Zunächst mal etwas zur Vertiefung: SELFHTML-Artikel: Datenbanken - dort finden sich zwei Artikel zum Thema Joins.

    So, nun überlegen wir also mal konkret zu deinem Problem:
    Du möchtest in EINER Abfrage alle tabelle2-Sätze haben, wobei SENDER und RECIPIENT aufgelöst wurden. Das sind also zwei Joins.
    Zur Frage welcher Join: Wenn alles richtig läuft, dann muss der Nutzer mit der jeweiligen ID ja vorhanden sein, also kannst du ruhig zum INNER Join greifen - der LEFT Join lohnt nur, falls du befürchtest eine oder beide Kennungen könnten nicht mehr existieren.

    SELECT post.id, sender.nickname, recipient.nickname, post.msg
    FROM
       tabelle2 AS post
    INNER JOIN
       tabelle1 AS sender
       ON post.sender = sender.id
    INNER JOIN
       tabelle1 AS recipient
       ON post.recipient = recipient.id

    Prinzip klar? Wenn nicht, frag, sonst hats nichts gebracht.

    MfG
    Rouven

    --
    -------------------
    Death is nature's way of telling you to slow down.
    1. O.K. danke!
      Ich glaub ich habs verstanden. Nach einer auszeit vom ganzen Datenbank-Zeug kann ich wieder halbwegs klar denken :)

      MfG,
      Snafu