2015-05-24 84 views
1

我是新來的SQL,並試圖獲得連接和引用的句柄。SQL:如何從同一個表中選擇兩個ID作爲兩個名稱?

數據庫是這樣的:

玩家

id | name 
----+------- 
    1 | john 
    2 | tim 
    3 | frank 
    4 | tony 
    5 | mark 

匹配

id | winner | loser 
----+--------+------- 
    1 |  2 |  4 
    2 |  3 |  4 
    3 |  4 |  5 
    4 |  1 |  4 

我想要得到這樣的結果:

id | winner | loser 
----+--------+------- 
    1 | tim | tony 
    2 | frank | tony 
    3 | tony | mark 
    4 | john | tony 

到目前爲止,我可以這樣做:

select matches.id, players.name as winner, players.name as loser 
    from matches, players 
    where winner = players.id; 

但是,如果我添加and loser = players.id,它不返回行。

我也試過這樣:

select matches.id, players.name as winner, players.name as loser 
    from matches 
    join players on matches.winner = players.id 
    join players on matches.loser = players.id; 

產生ERROR: table name "players" specified more than once

我把這個搜索了一個小時,可以找到很多的案例,幾乎得到我想要的,但我仍然無法弄清楚如何用同一個表中的兩個名稱替換兩個ID。

回答

3

你幾乎有:

select matches.id, w.name as winner, l.name as loser 
from matches 
join players w on matches.winner = w.id 
join players l on matches.loser = l.id; 
+0

謝謝,它的工作原理。我不知道可以在變量'w'和'l'之後放置'players'的特性。有沒有一個名稱,所以我可以查看它並瞭解更多信息? – sebu

+1

它被稱爲別名,用於區分表格並縮短您的語句。 – Tim3880

2

您需要別名表的名稱,以便您可以指定加入的數據應該來自。

select 
    matches.id, 
    p1.name as winner, 
    p2.name as loser 
from matches 
    join players p1 on matches.winner = p1.id 
    join players p2 on matches.loser = p2.id; 
+0

謝謝,這個作品 - 我給Tim3880打勾,因爲他們的答案基本上和早1分鐘相同:)謝謝你的時間。 – sebu

0

您將希望確保您在該表上連接兩次並保持別名正確。

SELECT Matches.id, winner.name, loser.name 
From Matches 
INNER JOIN Players as winner on winner.id = Matches.winner 
INNER JOIN Players as loser on loser.id = Matches.winner;