2017-03-12 80 views
0

我有下面的2個表。Mysql在同一個表中加入2個外鍵引用相同的密鑰

表:用戶

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

表:相對

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

我的目標是能夠檢索它像這樣:

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

請原諒我糟糕的術語和英語。 user1和user2是來自users.user_id的外鍵,它們一起構成組合鍵。

我能得到一列像這樣下面

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

但是,當我試圖讓他們在一起,就像上面顯示的目標,我不設法得到它的所有工作。如果有人有任何建議,我會很感激

+0

提示:兩個'JOIN's。 –

+0

@GordonLinoff thx用於輸入。然後我知道我有點在正確的軌道:) – Aqa

回答

0

你應該真的「只是嘗試一些事情」之前問。試試這個:

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 

需要注意的一個最重要的部分是你必須使用「表的別名」之間的第一個連接和第二個連接到同一個表來區分。 「u1」和「u2」是我爲這個例子選擇的別名。

+0

我真的搞砸了別名的一部分。現在有道理。謝謝 – Aqa

1

所以,如果你的模式是:

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); 

您可以使用下面的查詢:

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 
相關問題