我正在尝试为我的数据库重建一个 View ,这是我正在构建的曲棍球统计应用程序。
我的情况是这样的:我正在记录得分游戏的数据,每个IndividualScoreHockey
都有TeamId
和GameId
。有了这些数据,我可以把它带到MatchFixture
表并使用GameId
来确定游戏中正在玩哪两个团队。
因此,在我对AllScoringPlays
的看法中,我想创建一个标题为OpponentId
的列,该列会向TeamId
提供Goal
所针对的团队MatchFixture
。所以我认为我需要使用TeamId
中的IndividualScoreHockey
来查询HomeTeamId
表,并比较AwayTeamId
或TeamId
不等于{{1}的位置1}}来自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
:
IndividualScoreHockey
:
(Goal
,P_Assist
和S_Assist
列是归因于该得分游戏的玩家的ID)
我对视图很陌生,所以我不确定在哪里执行此子查询。或者也许我可以通过加入逃脱,我不确定。任何帮助将非常感激。如果我在这里屠宰任何东西,请随时发表评论,我可以尝试更好地解释它。
答案 0 :(得分:1)
如果我理解您的查询正确,您可以在OpponentId
记录中找到HomeTeamId
或AwayTeamId
作为MatchFixture
MF
CASE WHEN MF.HomeTeamId = ISH.TeamId THEN MF.AwayTeamId ELSE MF.HomeTeamId
END AS OpponentId
1}}。然后你只需将它添加到你选择的字段列表中即可获得你想要的结果:
{{1}}