2017-03-12 77 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 
相关问题