SQL Select 子查询和连接

SQL Select Subqueries and Joins

我已经尝试解决一个问题 15 个小时多了,我得出的结论是我已经超出了深度,但希望了解它是如何完成的。

我遇到的问题是第一个问题,我的大部分问题源于主队和客队的分数和名称。

这是我查询的结果。

SELECT home.TeamName AS HomeTeamName, home.Score AS HomeScore
FROM MatchParticipant home
LEFT JOIN Match m ON home.MatchID = m.MatchID
WHERE Field = 'Home' AND m.MatchStatus = 'NotStarted'
),
AwayTable AS(
SELECT away.TeamName AS AwayTeamName, away.Score AS AwayScore
FROM MatchParticipant away
RIGHT JOIN Match m ON away.MatchID = m.MatchID
WHERE Field = 'Away' AND m.MatchStatus = 'NotStarted'
)
SELECT HomeTeamName,HomeScore, AwayTeamName, AwayScore, StartDate, b.MatchID, MatchStatus, t.TournamentName,a.MatchParticipantID
FROM HomeTable, AwayTable, MatchParticipant a
INNER JOIN Match b ON b.MatchID=a.MatchID INNER JOIN Tournament t ON t.TournamentID=b.TournamentID
WHERE b.TournamentID = 2 AND b.MatchStatus = 'NotStarted'

同样,我知道这是不正确的,但希望有人能告诉我哪里出错了

问题A:获取所有未开始的英超联赛。

我会解释我的想法,希望有人能指出我的逻辑可能缺乏的地方。

SELECT T.TournamentName
FROM Tournament T
WHERE TournamentId = 2

Returns 'Premier League'

接下来我们查找尚未开始的比赛。

SELECT M.StartDate, M.MatchId T.TournamentId, M.MatchStatus
FROM Tournament T
LEFT JOIN Match M ON T.TournamentID = M.TournamentId
WHERE T.TournamentId = 2 AND M.MatchStatus = 'Not Started'

从这里我们加入 table,它为我们提供了额外的详细信息

SELECT H.TeamName As [HomeTeamName], H.Score As [HomeTeamScore], A.TeamName As [AwayTeamName], A.TeamScore As [AwayTeamScore], M.StartDate, M.MatchId T.TournamentId, M.MatchStatus
FROM Tournament T
LEFT JOIN Match M ON T.TournamentID = M.TournamentId
LEFT OUTER JOIN MatchParticipant H ON M.MatchId = H.MatchId
LEFT OUTER JOIN MatchParticipant A ON M.MatchId = A.MatchId
WHERE T.TournamentId = 2 AND M.MatchStatus = 'Not Started' AND H.Field = 'Home' AND A.Field = 'Away'

所以第一个连接是左连接,因为如果第二个 table 中有匹配项,它只包含第一个 table 的结果。然后下一个连接是左外部连接,因为它将 return 来自我们的第一个 table 结果,即使 MatchParticipant table 中还没有任何数据。

从这里开始,您需要考虑匹配分数的默认值。如果它是 '0' 那么很好,但是如果结果丢失,你应该考虑调查位于 SELECT 语句中的 CASE 语句,你基本上说 'if score is NULL then output 0, else sent out the current score'

希望对您有所帮助。