连接两个共享多对一关系的 SQL 表
Posted
技术标签:
【中文标题】连接两个共享多对一关系的 SQL 表【英文标题】:Joining Two SQL Tables That share a many to one Realtionship 【发布时间】:2015-09-08 15:27:05 【问题描述】:您好,我有两张表,一张名为 Team,另一张名为 Schedule。
Schedule 表具有以下属性:id
、away
、home
、date
... 其中 away 和 home 是 Team 表的外键。
Team 表具有以下属性:name
和 id
。
我的目标是加入 Team 和 Schedule,以便 schedule.id、away、awayTeamName、home、homeTeamName、date 都在同一个查询中。这就是我目前所拥有的
SELECT `GAME_ID` , `AWAY` , TEAM.NAME AS awayName, `HOME`, `LEVEL` ,
`LOCATION` , `DATE`
FROM SCHEDULE
INNER JOIN TEAM ON SCHEDULE.AWAY = TEAM.TEAM_ID
OR SCHEDULE.HOME = TEAM.TEAM_ID
我得到的输出是这样的
GAME_ID | AWAY | awayName | HOME | LEVEL | LOCATION | DATE
1 | 2 | name1 | 3 |varsity| @home | 06/22/2015
但我希望它看起来像这样
GAME_ID | AWAY | awayName | HOME | homeName| LEVEL | LOCATION | DATE
1 | 2 | name2 | 3 | name3 |varsity| @home | 06/22/2015
如果有人能帮忙,我将不胜感激
【问题讨论】:
您需要另一个带有Team
表的INNER JOIN
(使用不同的别名)。
你能提供数据吗?您只显示了您想要的结果,但您的源数据丢失了。
【参考方案1】:
您可以拥有多个联接。
SELECT SCHEDULE.GAME_ID , away.AWAY, away.NAME AS awayName, home.HOME , home.NAME AS homeName, LEVEL ,
LOCATION , DATE
FROM SCHEDULE
INNER JOIN TEAM as away ON SCHEDULE.AWAY = TEAM.TEAM_ID INNER JOIN TEAM as home ON
SCHEDULE.HOME = TEAM.TEAM_ID
会是这样的。
【讨论】:
【参考方案2】: INNER JOIN TEAM as home ON SCHEDULE.HOME = TEAM.TEAM_ID
将此添加到查询的末尾,这会为您提供两个完全合法的内部连接。
当您将来有两个以上的表要处理时,您应该会发现这很有用。
inner joins on more than 2 table
【讨论】:
以上是关于连接两个共享多对一关系的 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章