Join von zwei Spalten mit einer anderen Spalte

Schreiner

Neuer Benutzer
Beiträge
3
Hey Leute, ich wusste nicht, wie ich den Titel formulieren sollte, aber das Wichtige steht ja hier.

Und zwar hab ich eine Tabelle mit Daten von Usern, wovon jeder eine ID besitzt.

Auf der Website gibt es ein Formular, in dem jeder User einen Kommentar über einen anderen User schreiben konnte.

Dafür hab ich eine zweite Tabelle Kommentare erstellt mit den Spalten "id_from", "id_to" und "text". id_from ist die ID von dem Absender und id_to die ID vom Empfänger.

Jetzt möchte ich die Spalten id_from und id_to beide mit der Spalte id der Userdaten Tabelle joinen, sodass dann in der SQL-Abfrage steht von wem an wen das Kommentar gerichtet ist und dahinter das entsprechende Kommentar. Die entsprechende Tabelle möchte ich dann als PDF exportieren, um sie auszudrucken und an andere Personen weiterzugeben.

Ich hoffe, dass mein Problem verständlich formuliert ist. Ich selber kenne mich mit Joins nicht ganz so gut aus und hoffe, dass mir jemand sagen kann, wie man das löst.

Ich freue mich auf eure Antworten.

Grüße
Schreiner
 
Werbung:
Ich hoffe, dass mein Problem verständlich formuliert ist. Ich selber kenne mich mit Joins nicht ganz so gut aus und hoffe, dass mir jemand sagen kann, wie man das löst.

Du joinst doppelt, also etwa so:

select ... from ... left join user u1 on .... left join user u2 on ...

Wichtig sind die Aliase u1 und u2, damit kannst Du dann im select-Teil referenzieren, also z.B. u1.name as von, u2.name as an. Du schaffst das!
 
Okay ich habe mal etwas rumprobiert, aber bisher leider nicht hinbekommen. Ich kann ja mal meine Tabellen auflisten.

Ich habe die Tabelle "Benutzerdaten" mit den Spalten 'id', 'username' und noch ein paar andere irrelevante Spalten. Der username setzt sich aus Vorname und Nachname zusammen, sodass man die Person eindeutig indentifizieren kann.

Die zweite Tabelle heißt User_Kommentare mit den Spalten 'id', 'id_from', 'id_to' und 'text'.

Und wie gesagt jetzt möchte ich über einen join eine neue Tabelle erhalten mit den Spalten 'von' und 'an' in denen dann die usernamen von sender und empfänger stehen und als dritte Spalte text, in der der Kommentar steht.

Mein Versuch sah bisher so aus

SELECT Benutzerdaten, User_Kommentare.id_from AS von, User_Kommentare.id_to AS an, User_Kommentare.text
FROM Schüler_Kommentare
LEFT JOIN Benutzerdaten AS eins ON eins.id = User_Kommentare.id_from
LEFT JOIN Benutzerdaten AS zwei ON zwei.id = User_Kommentare.id_to

Da kommt dann leider die Fehlermeldung:
Unknown column 'User_Kommentare.id_from' in 'on clause'

Dann habe ich im Select Teil Benutzerdaten.id durch eins.id und zwei.id ersetzt, aber es kommt die gleiche Meldung

Was habe ich falsch gemacht? :D
 
Was habe ich falsch gemacht?

Du hörst nicht auf mich ;-)

Ein kleines Beipsiel gefällig?

Code:
test=*# create table leute (id int primary key, name text);
CREATE TABLE
Time: 48,209 ms
test=*# insert into leute values (1, 'ich');
INSERT 0 1
Time: 0,469 ms
test=*# insert into leute values (2, 'du');
INSERT 0 1
Time: 0,185 ms
test=*# insert into leute values (3, 'er');
INSERT 0 1
Time: 0,172 ms
test=*# create table message (von int references leute, an int references leute);
CREATE TABLE
Time: 92,405 ms
test=*# insert into message values (1,3);
INSERT 0 1
Time: 16,702 ms
test=*# insert into message values (3,2);
INSERT 0 1
Time: 0,302 ms
test=*# select l1.name, l2.name from message m left join leute l1 on m.von=l1.id left join leute l2 on m.an=l2.id;
 name | name
------+------
 ich  | er
 er  | du
(2 rows)

Time: 0,537 ms

2 mal joinen, Aliase verwenden, diese nutzen. That's all.
 
Vielen Dank es hat geklappt. Aus deiner ersten Antwort wurde ich nicht richtig schlau :D Ich stand einfach auf dem Schlauch. Ein Beispiel hilft manchmal Wunder. ;)

Grüße
Schreiner
 
Werbung:
Zurück
Oben