跨多个列的 SQL 联接

Posted

技术标签:

【中文标题】跨多个列的 SQL 联接【英文标题】:SQL Join across multiple columns 【发布时间】:2021-02-26 00:21:20 【问题描述】:

我正在 SQLite 中创建一个数据库来记录比赛结果和 SQL 查询,然后显示数据。

我有一张用于赛车手的桌子和一张用于结果的桌子。

赛车手

racerID racerName
1 Mark
2 Simon
3 Geoff

结果

resultID 1st 2nd 3rd
1 1 2 3
2 2 3 1
3 1 3 2

如何在所有位置显示姓名而不是只显示他们的 ID?

resultID 1st 2nd 3rd
1 Mark Simon Geoff
2 Simon Geoff Mark
3 Mark Geoff Simon

我已经设法让它为第 1 列工作。

select Racers.racerName as "1st", Results."2nd",Results."3rd"
from Results
inner join Racers on Results."1st"=Racers.racerID;

但是当我尝试以类似的方式获取其他列时,我得到了一个错误。

select Racers.racerName as "1st", Racers.racerName as "2nd",Racers.racerName as "3rd"
from Results
inner join Racers on Results."1st"=Racers.racerID
inner join Racers on Results."2nd"=Racers.racerID
inner join Racers on Results."3rd"=Racers.racerID;

我确定我忽略了一些非常基本的东西,但不知道如何克服这个问题。

提前致谢。

【问题讨论】:

【参考方案1】:

您需要为每个表引用使用单独的别名:

select r1.racerName as "1st", r2.racerName as "2nd", r3.racerName as "3rd"
from Results r join
     Racers r1
     on r."1st" = r1.racerID join
     Racers r2 
     on r."2nd" = r2.racerID join
     Racers r3
     on r."3rd" = r3.racerID;

【讨论】:

以上是关于跨多个列的 SQL 联接的主要内容,如果未能解决你的问题,请参考以下文章

SQL:跨两个层次结构的完全外部联接

MS Access 2013 中的嵌套 SQL 联接

查找内部联接的最大值 - SQL

使用内部联接删除 DB2

联接 (SQL Server)

Access-SQL:与多个表的内部联接