MySQL:从同一个表中选择两个具有相同名称的列

时间:2016-01-04 22:42:22

标签: mysql inner-join

我正在创建一个管理titleLabelgame数据的应用程序。这是mySQL数据库结构:

team

正如您所看到的,每个CREATE TABLE team ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE game ( id INT NOT NULL AUTO_INCREMENT, id_team_A INT NOT NULL, id_team_B INT NOT NULL, PRIMARY KEY (id) ); -- TEST VALUES: -- INSERT INTO team VALUES (1, "Barcelona"), (2, "Milan"), (3, "Real Madrid"), (4, "Inter"); INSERT INTO game VALUES (1, 1, 3), (2, 2, 4); 都有2个不同的match关联。

我尝试(没有成功)获得单个查询匹配ID,团队A名称,团队B名称

首先我尝试了这样的查询:

team

但我的查询并不关心SELECT game.id, team.name, team.name FROM team INNER JOIN game ON game.id_team_A = team.id; ,重复的match.id_team_B字段无法解决问题。

然后我开始使用嵌套在一起的select查询:

match.name

最后我得到了我想要的东西:

SELECT @g_id := game.id as id,
(SELECT team.name FROM team INNER JOIN game ON game.id_team_A = team.id WHERE game.id = @g_id) AS team_A,
(SELECT team.name FROM team INNER JOIN game ON game.id_team_B = team.id WHERE game.id = @g_id) AS team_B
FROM game;

是否有更简单/更快/更酷的查询才能获得相同的结果?

注意:SQL Fiddle

2 个答案:

答案 0 :(得分:2)

您可以在同一个表之间进行连接,因此您可以这样做:

SELECT g.id as id, a.name as team_a, b.name as team_b 
FROM team a INNER JOIN game g ON g.id_team_A = a.id
INNER JOIN team b ON g.id_team_B = b.id

答案 1 :(得分:2)

您需要两个别名:

SELECT g.id, t1.name team_A, t2.name team_B
FROM game g, team t1, team t2
WHERE g.id_team_A = t1.id AND g.id_team_B = t2.id

或者加入:

SELECT g.id, t1.name team_A, t2.name team_B
FROM game g JOIN team t1 ON g.id_team_A = t1.id
JOIN team t2 ON g.id_team_B = t2.id
相关问题