内连接 - 使用相同连接的两个值!

问题描述:

我有一个很好的想法,只是不能让我的头在这附近。内连接 - 使用相同连接的两个值!

我有一个表(转移)像下面

id | playerid | old | new | amount 

他们都是整数。

我加入这个表(队)以下

的加入将是对新与旧。

旧的和新的都是整数,我需要团队表中的名称。 是否有可能在一个查询中找出这两个名字?

感谢

是的,它是:

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

需要注意的是,如果你有一个纪录,其中新的比赛的entery老不(或反之亦然)的内连接会不匹配。然后使用外部连接。但在转让的情况下,这是没有意义的。 :)确保新旧不是NULL。