2017-03-12 3 views
0

Ich habe die 2 Tabellen unten.Mysql Join mit 2 Fremdschlüssel in der gleichen Tabelle Verweis auf den gleichen Schlüssel

Tabelle: Benutzer

user_id  username 
--   -- 
1   name1 
2   name2 
3   name3 

Tabelle: Rel

user1  user2 
--   -- 
1   2 
3   2 
1   3 

Mein Ziel in der Lage ist, es wie folgt zu erhalten:

user1  user2 
--   -- 
name1  name2 
name3  name2 
name1  name3 

Entschuldigen Sie meine schlechte Terminologie und Englisch. Benutzer1 und Benutzer2 sind Fremdschlüssel von users.user_id und bilden zusammen den zusammengesetzten Schlüssel.

Ich bin in der Lage, wie eine Spalte zu erhalten, so unter

SELECT users.username 
FROM users 
JOIN rel ON rel.user1 = users.user_id 

Aber wenn ich versuche, sie zu erhalten, zusammen, wie oben mit Ziel angezeigt Ich schaffe es nicht, es zu bekommen überhaupt arbeiten. Wenn jemand irgendwelche Vorschläge hätte, wäre ich wirklich dankbar

+0

Hinweis: zwei 'JOIN's. –

+0

@GordonLinoff thx für die Eingabe. Dann weiß ich, dass ich etwas auf dem richtigen Weg bin :) – Aqa

Antwort

0

Sie sollten wirklich "nur etwas versuchen", bevor Sie fragen. Versuchen Sie folgendes:

SELECT u1.username user1, u2.username user2 
FROM rel 
JOIN users u1 ON rel.user1 = u1.user_id 
JOIN users u2 ON rel.user2 = u2.user_id 

Ein wichtigste Teil ist zu beachten, dass Sie „Tabellen-Aliases“ zu unterscheiden zwischen dem ersten verbinden verwenden müssen, und die zweite auf den gleichen Tisch sitzen. "u1" und "u2" sind die Aliase, die ich für dieses Beispiel gewählt habe.

+0

Ich habe es wirklich auf dem Alias-Teil vermasselt. Es macht jetzt Sinn. Vielen Dank – Aqa

1

Also, wenn Ihr Schema ist:

CREATE TABLE Users (user_id int, username varchar(50)); 
INSERT INTO Users (user_id, username) VALUES (1, 'name1'); 
INSERT INTO Users (user_id, username) VALUES (2, 'name2'); 
INSERT INTO Users (user_id, username) VALUES (3, 'name3'); 

CREATE TABLE Rel (user1 int, user2 int); 
INSERT INTO Rel (user1, user2) VALUES (1, 2); 
INSERT INTO Rel (user1, user2) VALUES (3, 2); 
INSERT INTO Rel (user1, user2) VALUES (1, 3); 

Sie können die folgende Abfrage verwenden:

SELECT u1.username as user1, u2.username as user2 
FROM Rel r 
JOIN Users u1 ON r.user1 = u1.user_id 
JOIN Users u2 ON r.user2 = u2.user_id 

->

+---------+---------+ 
| user1 | user2 | 
|---------+---------| 
| name1 | name2 | 
| name3 | name2 | 
| name1 | name3 | 
+---------+---------+ 
3 rows in set 
Time: 0.002s 
Verwandte Themen