2010-10-30 49 views
1

我有一個很好的想法,只是不能讓我的頭在這附近。內連接 - 使用相同連接的兩個值!

我有一個表(轉移)像下面

id | playerid | old | new | amount 

他們都是整數。

我加入這個表(隊)以下

的加入將是對新與舊。

舊的和新的都是整數,我需要團隊表中的名稱。 是否有可能在一個查詢中找出這兩個名字?

感謝

回答

2

是的,它是:

SELECT t.id, 
     t.playerid, 
     t_old.name old_team, 
     t_new.name new_team, 
     t.amount 
FROM transfers t 
JOIN teams t_old ON (t_old.id = t.old) 
JOIN teams t_new ON (t_new.id = t.new); 

注意JOININNER JOIN的代名詞。

測試用例:

CREATE TABLE transfers (id int, playerid int, old int, new int, amount int); 
CREATE TABLE teams (id int, name varchar(100), founded datetime); 

INSERT INTO teams VALUES (1, 'Man Utd', '1900-01-01'); 
INSERT INTO teams VALUES (2, 'Liverpool', '1890-01-01'); 

INSERT INTO transfers VALUES (1, 1, 1, 2, 99999999); 

結果:

+------+----------+----------+-----------+----------+ 
| id | playerid | old_team | new_team | amount | 
+------+----------+----------+-----------+----------+ 
| 1 |  1 | Man Utd | Liverpool | 99999999 | 
+------+----------+----------+-----------+----------+ 
1 row in set (0.00 sec) 
+0

非常感謝,我會實現這一點,並希望給它一個綠色的刻度:) – sark9012 2010-10-30 00:50:01

+0

只讀了你添加的額外。這是完美的。我只是試圖改進,並且知道我應該將團隊作爲ID存儲在一個數據庫中,並在其他地方引用它。 – sark9012 2010-10-30 01:02:46

+0

@Luke:你的表看起來正確定義:) – 2010-10-30 01:04:48

0

需要注意的是,如果你有一個紀錄,其中新的比賽的entery老不(或反之亦然)的內連接會不匹配。然後使用外部連接。但在轉讓的情況下,這是沒有意義的。 :)確保新舊不是NULL。