MYSQL 为每个主队/客队生成两行,而不是为两支球队生成一行

问题描述 投票:0回答:0

我无法弄清楚如何加入两个足球比赛行,以便每场比赛都有主队和客队,这是迄今为止我能做的最好的 代码:

SELECT SM.MatchDate, SM.MatchStartTime, P.ParkName, F.FieldNumber, F.FieldName, 
       TH.TeamName AS 'Home Team Name', TA.TeamName AS 'Away Team Name', 
       CONCAT(R.RefereeFirst, ' ', R.RefereeLast) AS RefereeName, 
       CONCAT(SM.HomeTeamScore, ' - ', SM.AwayTeamScore) AS MatchScore, SM.Winner 
FROM SOCCERMATCH SM
INNER JOIN MATCH_TEAM MT ON SM.MatchID = MT.MATCH_MatchID
INNER JOIN FIELD F ON SM.FIELD_FieldID = F.FieldID
INNER JOIN PARK P ON F.PARK_ParkID = P.ParkID
INNER JOIN REF R ON SM.REF_RefereeID = R.RefereeID
LEFT JOIN TEAM TH ON TH.TeamID = MT.TEAM_TeamID AND SM.HomeTeam = TH.TeamName
LEFT JOIN TEAM TA ON TA.TeamID = MT.TEAM_TeamID AND SM.AwayTeam = TA.TeamName;

结果: Results 1

MatchDate, MatchStartTime, ParkName, FieldNumber, FieldName, Home Team Name, Away Team Name, RefereeName, MatchScore, Winner

  1. '2023-03-05', '15:00:00', '北塔尔萨', '3', '海军上将', '牧场主', NULL、'Sam Jones'、'4 - 6'、'BULLS'
  2. '2023-03-05', '15:00:00', '北塔尔萨', '3', '海军上将', NULL, 'BULLS'、'Sam Jones'、'4 - 6'、'BULLS'
  3. '2023-03-10', '17:00:00', '北塔尔萨', '3', '海军上将', '阿森纳', NULL,'Colby Warren','1 - 0','ARSENAL'
  4. '2023-03-10', '17:00:00', '北塔尔萨', '3', '海军上将', NULL, “马德里纽卡斯尔”、“科尔比沃伦”、“1 - 0”、“阿森纳”
  5. '2023-03-15', '15:00:00', '北塔尔萨', '3', '海军上将', '牧场主', NULL、'Sam Jones'、'4 - 6'、'KNICKERS'
  6. '2023-03-15', '15:00:00', '北塔尔萨', '3', '海军上将', NULL, 'KNICKERS', 'Sam Jones', '4 - 6', 'KNICKERS'
  7. '2023-03-20', '17:00:00', '北塔尔萨', '3', '海军上将', '阿森纳', NULL,'Colby Warren','1 - 0','ARSENAL'
  8. '2023-03-20', '17:00:00', '北塔尔萨', '3', '海军上将', NULL, “剑桥精英”、“科尔比沃伦”、“1 - 0”、“阿森纳”

其他尝试也出现了类似的问题: 代码:

SELECT SM.MatchDate, SM.MatchStartTime, P.ParkName, F.FieldNumber, F.FieldName, SM.HomeTeam AS 'Home Team Name', SM.HomeTeam AS 'Away Team Name', 
        CONCAT(R.RefereeFirst, ' ', R.RefereeLast) AS RefereeName, CONCAT(SM.HomeTeamScore, ' - ', SM.AwayTeamScore) AS MatchScore, SM.Winner 
FROM SOCCERMATCH SM
INNER JOIN MATCH_TEAM MT ON SM.MatchID = MT.MATCH_MatchID
INNER JOIN FIELD F ON SM.FIELD_FieldID = F.FieldID
INNER JOIN PARK P ON F.PARK_ParkID = P.ParkID
INNER JOIN REF R ON SM.REF_RefereeID = R.RefereeID;

结果:Results 2

MatchDate, MatchStartTime, ParkName, FieldNumber, FieldName, HomeTeamName, AwayTeamName, RefereeName, MatchScore, Winner

  1. '2023-03-05', '15:00:00', '北塔尔萨', '3', '海军上将', '牧场主', “RANCHERS”、“Sam Jones”、“4 - 6”、“BULLS”
  2. '2023-03-05', '15:00:00', '北塔尔萨', '3', '海军上将', '公牛队', 'BULLS'、'Sam Jones'、'4 - 6'、'BULLS'
  3. '2023-03-10', '17:00:00', '北塔尔萨', '3', '海军上将', '阿森纳', “阿森纳”、“科尔比沃伦”、“1 - 0”、“阿森纳”
  4. '2023-03-10', '17:00:00', '北塔尔萨', '3', '海军上将', '马德里 纽卡斯尔”、“马德里纽卡斯尔”、“科尔比沃伦”、“1 - 0”、“阿森纳”
  5. '2023-03-15', '15:00:00', '北塔尔萨', '3', '海军上将', '牧场主', “RANCHERS”、“Sam Jones”、“4 - 6”、“KNICKERS”
  6. '2023-03-15', '15:00:00', '北塔尔萨', '3', '海军上将', '内裤', 'KNICKERS', 'Sam Jones', '4 - 6', 'KNICKERS'
  7. '2023-03-20', '17:00:00', '北塔尔萨', '3', '海军上将', '阿森纳', “阿森纳”、“科尔比沃伦”、“1 - 0”、“阿森纳”
  8. '2023-03-20', '17:00:00', '北塔尔萨', '3', '海军上将', '剑桥 精英”、“剑桥精英”、“科尔比沃伦”、“1 - 0”、“阿森纳”

或者在这两种情况下根本没有返回行: 代码:

SELECT SM.MatchDate, SM.MatchStartTime, PK.ParkName, F.FieldNumber, F.FieldName, 
       T1.TeamName AS HomeTeamName, T2.TeamName AS AwayTeamName, CONCAT(R.RefereeFirst, ' ', R.RefereeLast) AS RefereeName, 
       CONCAT(SM.HomeTeamScore, ' - ', SM.AwayTeamScore) AS Score, SM.Winner
FROM SOCCERMATCH SM
INNER JOIN FIELD F ON SM.FIELD_FieldID = F.FieldID
INNER JOIN PARK PK ON F.PARK_ParkID = PK.ParkID
INNER JOIN MATCH_TEAM MT1 ON SM.MatchID = MT1.MATCH_MatchID AND MT1.TEAM_TeamID = SM.HomeTeam
INNER JOIN MATCH_TEAM MT2 ON SM.MatchID = MT2.MATCH_MatchID AND MT2.TEAM_TeamID = SM.AwayTeam
INNER JOIN TEAM T1 ON MT1.TEAM_TeamID = T1.TeamID
INNER JOIN TEAM T2 ON MT2.TEAM_TeamID = T2.TeamID
INNER JOIN REF R ON SM.REF_RefereeID = R.RefereeID;

SELECT SM.MatchID, SM.MatchDate, SM.MatchStartTime, P.ParkName, F.FieldNumber, F.FieldName, 
    HT.TeamName AS 'Home Team Name', AT.TeamName AS 'Away Team Name', 
    CONCAT(R.RefereeFirst, ' ', R.RefereeLast) AS RefereeName, 
    CONCAT(SM.HomeTeamScore, ' - ', SM.AwayTeamScore) AS MatchScore, SM.Winner 
FROM SOCCERMATCH SM
INNER JOIN MATCH_TEAM MT ON SM.MatchID = MT.MATCH_MatchID
INNER JOIN FIELD F ON SM.FIELD_FieldID = F.FieldID
INNER JOIN PARK P ON F.PARK_ParkID = P.ParkID
INNER JOIN REF R ON SM.REF_RefereeID = R.RefereeID
INNER JOIN TEAM HT ON HT.TeamID = MT.TEAM_TeamID AND SM.HomeTeam = HT.TeamName
INNER JOIN TEAM AT ON AT.TeamID = MT.TEAM_TeamID AND SM.AwayTeam = AT.TeamName;

结果:Results 3 MatchID, MatchDate, MatchStartTime, ParkName, FieldNumber, FieldName, Home Team Name, Away Team Name, RefereeName, MatchScore, Winner 没什么

我还包括一个 EER 图,以便您更好地理解设计。我不想更改架构,因为我的教授已经签署了它,但如果确实有必要,请告知。 Screenshot 1

我已经尝试了上面的三种不同变体,并希望它在正常工作时看起来像这样(屏幕截图 2)。 Screenshot 2

sql mysql join left-join inner-join
© www.soinside.com 2019 - 2024. All rights reserved.