MySQL,在同一查询中使用联接表两次

MySQL,在同一查询中使用联接表两次,mysql,join,Mysql,Join,我试图编写一个MySQL查询,将同一个表中的两列连接到另一个表。我看了很多例子,尝试了很多东西,其中大多数都是因为某种原因而出错的 我有一张桌子: ID | Team 1 | Team 1 2 | Team 2 3 | Team 3 4 | Team 4 我有一张游戏桌: ID | Team_1 | Team_2 1 | 1 | 2 2 | 2 | 3 3 | 3 | 4 4 | 4 | 1 我有以下疑问:

我试图编写一个MySQL查询,将同一个表中的两列连接到另一个表。我看了很多例子,尝试了很多东西,其中大多数都是因为某种原因而出错的

我有一张桌子:

 ID | Team
 1  | Team 1
 2  | Team 2
 3  | Team 3
 4  | Team 4
我有一张游戏桌:

 ID | Team_1 | Team_2
  1  |  1     | 2
  2  |  2     | 3
  3  |  3     | 4
  4  |  4     | 1
我有以下疑问:

SELECT PIO.Games.id
      , Team.Name AS `Team-1`
      , Team.Name AS `Team-2`
  FROM Games
  left 
  JOIN Team 
    ON Games.Team_1 = Team.id
  left 
  JOIN Team as T2 
    ON Games.Team_2 = Team.id
我需要列出比赛并显示球队名称,我希望:

Game_ID   Team-1     Team-2
  1    |     Team 1  |   Team 2
  2    |     Team 2  |   Team 3
  3    |     Team 3  |   Team 4
  4    |     Team 4  |   Team 1
但我两次得到一线队:

 Game_ID |  Team-1  |   Team-2
 1       |  Team 1  |   Team 1
 2       |  Team 2  |   Team 2
 3       |  Team 3  |   Team 3
 4       |  Team 4  |   Team 4
到目前为止,我已经花了几个小时在这个问题上,但没有找到任何有效的方法!我想我错过了一些非常简单的东西

我已经在Navicat和sequepro的MAMP中的mySQL数据库上尝试了这些解决方案


有人有什么想法吗?非常感谢您的帮助。

请使用您创建的别名。这将允许您两次加入团队表,但不会混淆db引擎

    SELECT g.id, t.Name AS Team-1, t2.Name AS Team-2
    FROM Games AS g
    LEFT JOIN Teams AS t ON g.Team_1 = t.ID
    LEFT JOIN Teams AS t2 ON g.Team_2 = t2.ID

已经解决了,谢谢你的帮助。看起来我在这个例子中把自己搞糊涂了!替换。团队替换。名字和一切似乎都很好

SELECT 
Games.id,
T1.Name AS "Team-1",
T2.Name AS "Team-2"

FROM Games 
left join Team as T1 on Games.Team_1 = T1.id
left join Team as T2 on Games.Team_2 = T2.id

JOIN
子句说明了事实:您有两个“Team”表的实例。第二个别名为“T2”(
jointteamast2
),这使得名称“Team”在查询的其余部分中无法识别它。第一个称为“团队”(因为它没有任何别名)。阅读查询的其余部分,想象一下表的第一个实例,它在那里读“Team”,第二个实例,它在那里读“T2”(实际上没有任何地方)。解决方案应该很容易找到:对表的第一个实例使用别名(“T1”),并在查询的其余部分将“Team”替换为“T1”或“T2”。非常感谢,这与我之前尝试的一些方法类似,不幸的是,我在“字段列表”错误中得到一个:“未知列”t.Team。@user1814966表中该列的名称是什么?您在表架构中将Team列为列的名称,但在sql中列为列的名称。它叫什么名字?更新了我的答案,将名称作为列。您需要找出实际的列名是什么,然后填写它。另外,如果表是Teams而不是Team,那么这可能就是问题所在。验证表名和列名是否正确,它应该可以正常工作。