内部联接从其他 table 获取两个具有 id 的名称列
Inner join get two name columns with id from other table
我有这个代码
SELECT
home, away, teams.name as home_name, teams.abbreviation as home_abbr, teams.name as away_name, teams.abbreviation as away_abbr
FROM
games
INNER JOIN
teams ON games.home = teams.id
WHERE
games.date >= '2022-01-01'
和这个结果
我有两个 table 的“游戏”和“团队”。在“游戏”table 中有主场和客场列。那里只写了id team。在“团队”table中有名称、缩写、图标等信息。我需要使用来自“teams”table 的联合查询来获取主场和客场球队的名称和缩写。在我的情况下,只获得一个(主场或客场)列信息
问题是您需要“查找”“游戏”中的两个团队值。这意味着您需要两个联接才能获得主场和客场的不同值。
假设
- 游戏有
home
和 away
个来自 teams
table... 的外键 ID
- 每场比赛由两支球队组成,一支是“主场”,一支是“客场”
我们只是从比赛中加入两次,一次是“主队”数据,一次是“客队”数据。我们需要为每个加入别名“h”(家)“a”(离开)
然后更新字段以使用正确的别名。
给我们:
SELECT g.home, g.away,
h.name as home_name, h.abbreviation as home_abbr,
a.name as away_name, a.abbreviation as away_abbr
FROM games g
INNER JOIN teams h
ON g.home = h.id
INNER JOIN teams a
ON g.away = a.id
WHERE g.date >= '2022-01-01'
注:
为清楚起见,我为所有 3 个 table 和 select/join/where
中的每个字段设置了别名
未解决的问题
您说,“需要使用来自“teams”table 的联合查询来获取主队和客队的名称和缩写 table。”
为什么需要工会?这就是您认为可以让两支球队 names/abbreviations 的方式吗?如果是这样的话,这种方法对我来说没有意义,因为 Join 就足够了。除非你在不同的线路上寻找游戏的结果:你的示例输出没有显示。所以我认为联合是给出预期结果的错误方法。这并不是说不能用 union 和 max 以及 group by 来完成;但它比简单的连接工作更多,而且可能更慢。
我有这个代码
SELECT
home, away, teams.name as home_name, teams.abbreviation as home_abbr, teams.name as away_name, teams.abbreviation as away_abbr
FROM
games
INNER JOIN
teams ON games.home = teams.id
WHERE
games.date >= '2022-01-01'
和这个结果
我有两个 table 的“游戏”和“团队”。在“游戏”table 中有主场和客场列。那里只写了id team。在“团队”table中有名称、缩写、图标等信息。我需要使用来自“teams”table 的联合查询来获取主场和客场球队的名称和缩写。在我的情况下,只获得一个(主场或客场)列信息
问题是您需要“查找”“游戏”中的两个团队值。这意味着您需要两个联接才能获得主场和客场的不同值。
假设
- 游戏有
home
和away
个来自teams
table... 的外键 ID
- 每场比赛由两支球队组成,一支是“主场”,一支是“客场”
我们只是从比赛中加入两次,一次是“主队”数据,一次是“客队”数据。我们需要为每个加入别名“h”(家)“a”(离开) 然后更新字段以使用正确的别名。
给我们:
SELECT g.home, g.away,
h.name as home_name, h.abbreviation as home_abbr,
a.name as away_name, a.abbreviation as away_abbr
FROM games g
INNER JOIN teams h
ON g.home = h.id
INNER JOIN teams a
ON g.away = a.id
WHERE g.date >= '2022-01-01'
注: 为清楚起见,我为所有 3 个 table 和 select/join/where
中的每个字段设置了别名未解决的问题 您说,“需要使用来自“teams”table 的联合查询来获取主队和客队的名称和缩写 table。”
为什么需要工会?这就是您认为可以让两支球队 names/abbreviations 的方式吗?如果是这样的话,这种方法对我来说没有意义,因为 Join 就足够了。除非你在不同的线路上寻找游戏的结果:你的示例输出没有显示。所以我认为联合是给出预期结果的错误方法。这并不是说不能用 union 和 max 以及 group by 来完成;但它比简单的连接工作更多,而且可能更慢。