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

时间:2010-10-30 00:44:51

标签: sql mysql

我有一个很好的想法,只是无法理解这一点。

我有一张表(转移),如下所示

id | playerid | old | new | amount

它们都是整数。

我正在加入此表(团队)到以下

id | name | founded

加入将是旧的和新的。

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

由于

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

请注意,如果你有一个记录,其中new匹配一个entery而old不匹配(反之亦然),内联接将无法匹配。然后使用外连接。但是在转移的情况下,这没有意义。 :)确保new和old不是NULL。