Eine Tabelle mit zwei Datensätzen aus einer weiteren Tabelle verbinden

SonMiko

Erfahrenes Mitglied
Hallo zusammen,

ich versuche derzeit verzweifelt, 2 Datensätze aus einer Tabelle mit den IDs aus einer Tabelle zu verbinden.

Das Szenario sieht folgendermaßen aus:
Es gibt eine Tabelle in der Termine festgehalten werden.
Diese Tabelle beinhaltet zwei IDs zu je einem User.
Beide User kommen jedoch aus derselben Tabelle.

Es gibt also 2 Left Joins die zur selben Tabelle führen nur eben mit anderen spalten in der Termin-Tabelle verknüpft sind (starter_id, joiner_id - nenn ich sie hier einfach mal).

Mit einem Leftjoin ****t alles wunederbar.
Allerdings brauche ich auch die Daten des anderen Teilnehmers.

Da ich hierzu die Tabelle erneut befrage, ist sie nicht mehr "unique".
Ich erteile Ihr also einen eindeutigen Bezeichner mit AS und die Abfrage funktioniert wieder - liefert jedoch trotzdem am Ende NUR die Daten des starters und nicht des Joiners.

Meine Frage also in komprimierter Form:
Wie kann ich 2 Datensätze aus EINER Tabelle mit einer anderen Tabelle verbinden?
termine->user(user_a)
termine->user(user_b)
?

Hat jemand eine Idee?
Hier mein Ansatz:
Code:
SELECT
                                schedule.*,
                                user.id
                            FROM
                                schedule
                            LEFT JOIN
                                user
                            ON
                                schedule.id_starter = user.id
                            LEFT JOIN
                                user AS joiner
                            ON
                                schedule.id_joiner = user.id

Liebe Grüße,

Mike
 
Hallo Mike,

du musst bei den zu selektierenden Feldern auch die entsprechenden Spalten des zweiten Joins angeben. \edit: Beim zweiten Join solltest du außerdem den Alias in der ON-Klausel verwenden. Also z.B. so:
SQL:
SELECT
    schedule.*,
    user.username AS starter_username,
    joiner.username AS joiner_username
FROM
    schedule
LEFT JOIN
    user
ON
    schedule.id_starter = user.id
LEFT JOIN
    user AS joiner
ON
    schedule.id_joiner = joiner.id

Grüße,
Matthias
 
Zuletzt bearbeitet:
Okay funktioniert und hat schonmal sehr geholfen danke - nun möchte ich allerdings noch eingrenzen.
Es sollen nur Datensätze angezeigt werden wo joiner.id = 6 ist.
HAVING, WHERE funktioniert beides nicht, weder bei schedule. noch bei joiner. ...
Dazu noch eine Idee?
 
Habs gelöst:
Having war schon richtig, aber der Tabellenname musste weggelassen werden:
HAVING
joiner_id = X hat also geklappt!

Danke :)
 
Nein hab ich nicht.
Es funktioniert so auf dem Weg - gerne kannst du mir aber eine alternative oder eine bessere Variante unterbreiten?!
 
Zurück