SQL SELECT语句两次引用表

时间:2016-04-24 11:05:06

标签: mysql sql select join

我尝试了很多SQL连接并搜索了stackoverflow,但无济于事。

实际上,我有一个带两张桌子的棒球数据库。 A"团队" table(有一个team_id和team_name)和一个"游戏"表(当一个团队扮演另一个团队,何时,何地等)。

我想创建一个给出teams.team_name值的SQL查询,该查询返回给定团队最后10场比赛(在#34; home"在他们的体育场内,或者#34;离开& #34;在竞争对手的体育场),以及给定游戏中两队的名称(teams.team_name),基于游戏表中相应的teams.team_id。

表:

团队

  

排#1(team_id)1,(team_name)"洋基队"
  排名#2(team_id)2,(team_name)" LA Dodgers"
  排名#2(team_id)3,(team_name)" Red Sox"
  ...

GAMES

  

行#1(game_id)1,(home_team_id)1,(away_team_id)2,(date_played)...
  行#2(game_id)2,(home_team_id)3,(away_team_id)2,(date_played)...
  行#3(game_id)3,(home_team_id)2,(away_team_id)3,(date_played)...

我想要返回的SQL查询是:

  

"主队" -----"客队" ----"约会时间"
  Yankees ----------- LA Dodgers ------ ## / ## / ####
  Red Sox ----------- LA Dodgers ------ ## / ## / ####
  洛杉矶道奇队------红袜队---------- ## / ## / ####

这个查询几乎得到了我需要的输出,但是我想要" team_name"来自"团队"表,但将其添加到SELECT会产生有问题的输出

SELECT games.home_team_id,
   games.away_team_id
FROM games,
     teams
WHERE games.home_team_id = teams.team_id
  AND teams.team_name = "Yankees"
  OR games.away_team_id = teams.team_id
  AND teams.team_name = "Yankees"
ORDER BY games.date_played DESC LIMIT 0, 10;

1 个答案:

答案 0 :(得分:3)

一般情况下,如果您想在一个查询中多次使用同一个表(可能是两种不同的容量),您可以为表格提供别名 - 您在表格后面列出的名称FROMJOIN子句中的名称:

SELECT h.team_name, a.team_name, g.date_played
FROM Games g
JOIN Teams h ON h.team_id = g.home_team_id
JOIN Teams a ON a.team_id = g.away_team_id
WHERE ...

gha是各自表格的别名。

请注意使用JOIN语法而不是列出FROM子句中的所有表,并将它们约束在WHERE子句中。这是一个更清晰的语法,应该在带有连接的查询中使用。