我试图弄清楚如何用一个查询而不是一堆查询。

我有3张桌子。


  游戏(ID,GameName,Team1_id,Team2_id,日期时间)
  
  GameResults(ID,game_ID,win_team,得分)
  
  团队(ID,团队名称)


我想返回带有该列表的查询:
游戏名称,日期时间,Team1.team_name,Team2.team_name,win_team,得分。

但是,即使没有win_team或得分,我也想退回所有比赛和球队。如果我将表与外键绑定在一起,则在GameResults表中没有记录的任何游戏都不会显示。我想要所有游戏,但有些还没有玩过。如果有GameResults,我该如何返回GameResults,即使没有GameResults记录,仍要返回所有游戏?

我可以返回所有游戏,然后循环检查表的结果,但是似乎可以通过一个查询来完成此操作。

最佳答案

使用outer join

select g.gamename, g.datetime, t1.team_name, t2.team_name, gr.win_team, gr.score
from games g
   inner join teams t1 on g.team1_id = t1.id
   inner join teams t2 on g.team2_id = t2.id
   left join gameresults gr on g.id = gr.game_id



A Visual Explanation of SQL Joins

09-16 23:16