内连接 - 使用相同连接的两个值!
问题描述:
我有一个很好的想法,只是不能让我的头在这附近。内连接 - 使用相同连接的两个值!
我有一个表(转移)像下面
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);
注意JOIN
是INNER 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)
答
需要注意的是,如果你有一个纪录,其中新的比赛的entery老不(或反之亦然)的内连接会不匹配。然后使用外部连接。但在转让的情况下,这是没有意义的。 :)确保新旧不是NULL。
非常感谢,我会实现这一点,并希望给它一个绿色的刻度:) – sark9012 2010-10-30 00:50:01
只读了你添加的额外。这是完美的。我只是试图改进,并且知道我应该将团队作为ID存储在一个数据库中,并在其他地方引用它。 – sark9012 2010-10-30 01:02:46
@Luke:你的表看起来正确定义:) – 2010-10-30 01:04:48