我有以下表格:SQL双外连接?
Users - Users of the site
Matchups - Matchups between two teams
Periods - The periods in which matchups take place
MatchupResults - The results of the matchups
UserPicks - The user's choice of who will win the matchup (5 picks for each period)
Teams - Teams in the matchups
的关系如下:
Matchups.HomeID/Matchups.VisitorID = Teams.ID
Matchups.PeriodID = Periods.ID
MatchupResults.MatchupID = Matchups.ID
UserPicks.MatchupID = Matchups.ID
UserPicks.UserID = User.ID
我想获得(英文)是:
所有用户,无论他们是否无论他们是否有成绩,都做出了挑战和所有对决。如果他们有结果或选择,我希望他们显示。
我已经得到这个查询来获取我的对决,因为我希望他们:
select P.ID as PeriodID,
M.ID as MatchupID,
V.ID as VisitorTeam,
H.ID as HomeTeam,
MR.VisitorScore,
MR.HomeScore,
CASE WHEN (M.PointSpread <= 0) THEN
CASE WHEN (MR.HomeScore + M.PointSpread > MR.VisitorScore) THEN H.ID ELSE V.ID END
WHEN (M.PointSpread > 0) THEN
CASE WHEN (MR.HomeScore + M.PointSpread < MR.VisitorScore) THEN V.ID ELSE H.ID END
ELSE NULL
END AS TeamThatCoveredSpread
from Matchups M
left outer join MatchupResults MR ON MR.MatchupID = M.ID
inner join Teams V ON V.ID = M.VisitorID
inner join Teams H ON H.ID = M.HomeID
inner join Periods P ON P.ID = M.PeriodID
但是我有包括用户和他们的选秀权的麻烦 - 不管我尝试它让我的过滤结果只有用户选择的游戏。
因此,如果有10用户我选择1对决,我应该看到所有10个用户以及一个TeamID作为自己挑选或NULL这意味着他们没有做一挑的那场比赛。
更新:对于上面的查询的样本结果与简单指定期限1:
我想你在找什么这里是一个十字(笛卡尔)加入 –
@EricPetroelje不,他正在寻找一个'LEFT JOIN'而不是可空值。 – Matthew
@TerryR我开始为你建立样本数据,并且我发现了一些我没有得到的东西。你如何确定用户在比赛中选择了哪支球队?我看到UserPicks如何包含UserID和matchupId,但它是否也表示主页/访客或团队ID? –