我正在尝试为我的数据库重建一个View,这是针对我正在构建的曲棍球统计应用程序。
我的情况是这样的:我正在记录得分比赛的数据,每个IndividualScoreHockey
都有一个TeamId
和GameId
。有了这些数据,我可以将其移到MatchFixture
表中,并使用GameId
来确定游戏中有哪两个团队在比赛。
因此,根据我对AllScoringPlays
的看法,我想创建一个标题为OpponentId
的列,该列将为我提供TeamId
所针对的团队的Goal
。因此,我相信我需要使用MatchFixture
中的TeamId
查询IndividualScoreHockey
表,并比较HomeTeamId
或AwayTeamId
不等于TeamId
和IndividualScoreHockey
中的GameId
的地方(ISH)等于Id
(MF)
我不确定如何创建执行此操作的子查询,我相信这将遵循以下原则:SELECT (HomeTeamId OR AwayTeamId) AS OpponentId FROM MatchFixture WHERE Id = foo AND (HomeTeamId != bar OR AwayTeamId != bar)
现在,我的观点如下:
CREATE VIEW `AllScoringPlays` AS
SELECT
`ISH`.`GameId` AS `GameId`,
`ISH`.`TeamId` AS `TeamId`,
`MF`.`SeasonId` AS `SeasonId`,
`ISH`.`Goal` AS `GoalId`,
`ISH`.`P_Assist` AS `P_AssistId`,
`ISH`.`S_Assist` AS `S_AssistId`,
`ISH`.`Time` AS `Time`,
FROM
(((((`IndividualScoreHockey` `ISH`
join `User` `UG` ON ((`ISH`.`Goal` = `UG`.`Id`)))
join `Team` `T` ON ((`T`.`Id` = `ISH`.`TeamId`)))
join `MatchFixture` `MF` ON ((`ISH`.`GameId` = `MF`.`Id`)))
left join `User` `UPA` ON ((`ISH`.`P_Assist` = `UPA`.`Id`)))
left join `User` `USA` ON ((`ISH`.`S_Assist` = `USA`.`Id`)))
ORDER BY `ISH`.`Period` , `ISH`.`Time`
这是我必须处理的数据的概略图
MatchFixture
:ID | SeasonId | LeagueId | HomeTeamId | AwayTeamId |日期
IndividualScoreHockey
:ID | TeamId | GameId |目标| P_Assist | S_Assist |时间
(
Goal
,P_Assist
和S_Assist
列是归因于该得分比赛的玩家的ID)我真的是视图的新手,所以我不确定在哪里执行此子查询。或者不确定我是否可以加入联接。任何帮助将非常感激。如果我在这里屠杀了任何东西,请随时发表评论,我可以尝试更好地解释。
最佳答案
如果我理解您的查询正确无误,则可以在您已经以OpponentId
身份加入的HomeTeamId
记录中找到所需的AwayTeamId
作为MatchFixture
或MF
。然后,只需将其添加到您选择的字段列表中,即可获得所需的结果:
CASE WHEN MF.HomeTeamId = ISH.TeamId THEN MF.AwayTeamId ELSE MF.HomeTeamId
END AS OpponentId