如何在同一列上使用两个连接

Posted

技术标签:

【中文标题】如何在同一列上使用两个连接【英文标题】:How to use two joins on the same column 【发布时间】:2012-03-23 05:57:30 【问题描述】:

我有两张桌子:一张匹配,另一张是团队。在比赛中,我有一个日期、时间和两个 ID(两支球队)。在团队中,我有一个 ID 和团队名称。我想要做的是获取带有球队名称的比赛列表。 我知道 INNER JOIN 可以做到这一点,但我不确定如何......这就是我所拥有的:

SELECT teams.name AS team1, teams.name AS team2, matchs.id, matchs.date, matchs.time
FROM matchs
INNER JOIN teams ON teams.id=matchs.team1

显然,我得到的只是 team1 的名称。我怎样才能拥有两个团队名称?

谢谢

【问题讨论】:

【参考方案1】:

你想做如下的事情。只需使用别名来区分这两个连接并使您的代码更具表现力。

SELECT teams1.name AS team1, teams2.name AS team2, matchs.id, matchs.date, matchs.time
FROM matchs
    INNER JOIN teams AS teams1
        ON teams1.id=matchs.team1
    INNER JOIN teams AS teams2 
        ON teTeams2ams.id=matchs.team2

【讨论】:

好像我的 SQL 类很远!就是这样,效果很好,谢谢! 是的,别名在这里非常有用。我将原始加入别名设为team1,以便更清楚哪个是team1,哪个是team2。【参考方案2】:

最简单的方法是执行两个连接:

SELECT t1.name AS team1, t2.name AS team2, 
       matchs.id, matchs.date, matchs.time
FROM matchs
    INNER JOIN teams t1 
        ON t1.id = matchs.team1  
    INNER JOIN teams t2 
        ON t2.id = matchs.team2

这些表是aliased(t1t2)以区分查询中的每个数据集。

【讨论】:

【参考方案3】:

您可以通过执行另一个连接并提供表别名来实现此目的:

SELECT t1.name AS team1, t2.name AS team2, matchs.id, matchs.date, matchs.time
FROM matchs
INNER JOIN teams as t1 ON t1.id = matchs.team1
INNER JOIN teams ON as t2 t2.id = matchs.team1

【讨论】:

【参考方案4】:
SELECT t1.name AS team1, t2.name AS team2, matchs.id, matchs.date, matchs.time
FROM matchs
INNER JOIN teams t1 ON t1.id = matchs.team1 
INNER JOIN teams t2 on t2.id = matchs.team2

【讨论】:

以上是关于如何在同一列上使用两个连接的主要内容,如果未能解决你的问题,请参考以下文章

嵌套选择的内部连接 ​​- 多次使用同一列时

加入表两次 - 在同一个表的两个不同列上

具有别名的同一列上的多个连接

如何使用 MYSQL 中的连接从多个表中获取多个列并在非空列上显示数据以及在空列上显示 null 或零

在同一列上连接具有不同行的 2 个表

如何在辅助表中的非主键列上连接表?