2017-03-12 16 views
0

私は以下の2つのテーブルを持っています。Mysql同じキーを参照する同じテーブルの2つの外部キーとの結合

表:ユーザー

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

表:のRel

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 

のように1列を取得することができるが、私は、私はそれがすべての作業を取得するために管理していない目標に上に表示のように一緒にそれらを取得しようとします。もし誰かが何か提案があれば、私は本当に感謝します

+0

ヒント:2 '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 

注意すべき最も重要な部分は、あなたが最初に参加し、第2の同テーブルへの結合を区別するために「テーブルの別名」を使用しなければならないということです。 "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 
関連する問題