繁体   English   中英

SQL 选择子查询和连接

[英]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

返回“英超联赛”

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

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'

从这里我们加入表格,为我们提供额外的细节

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'

所以第一个连接是左连接,因为如果第二个表中有匹配,它只包含第一个表的结果。 然后下一个连接是左外部连接,因为即使 MatchParticipant 表中还没有任何数据,它也会从我们的第一个表返回结果。

从这里开始,您需要考虑匹配分数的默认值。 如果它是“0”,那么很好,但是如果结果丢失,您应该考虑调查位于 SELECT 语句中的 CASE 语句,您基本上说“如果分数为 NULL,则输出 0,否则发送当前分数”

我希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM