我试图弄清楚如何用一个查询而不是一堆查询。
我有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