MySQL:在视图中的选择内选择?

时间:2013-04-15 21:06:24

标签: mysql join view

我正在尝试为我的数据库重建一个 View ,这是我正在构建的曲棍球统计应用程序。

我的情况是这样的:我正在记录得分游戏的数据,每个IndividualScoreHockey都有TeamIdGameId。有了这些数据,我可以把它带到MatchFixture表并使用GameId来确定游戏中正在玩哪两个团队。

因此,在我对AllScoringPlays的看法中,我想创建一个标题为OpponentId的列,该列会向TeamId提供Goal所针对的团队MatchFixture。所以我认为我需要使用TeamId中的IndividualScoreHockey来查询HomeTeamId表,并比较AwayTeamIdTeamId不等于{{1}的位置1}}来自IndividualScoreHockeyGameId(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 |时间

GoalP_AssistS_Assist列是归因于该得分游戏的玩家的ID)

我对视图很陌生,所以我不确定在哪里执行此子查询。或者也许我可以通过加入逃脱,我不确定。任何帮助将非常感激。如果我在这里屠宰任何东西,请随时发表评论,我可以尝试更好地解释它。

1 个答案:

答案 0 :(得分:1)

如果我理解您的查询正确,您可以在OpponentId记录中找到HomeTeamIdAwayTeamId作为MatchFixture MF CASE WHEN MF.HomeTeamId = ISH.TeamId THEN MF.AwayTeamId ELSE MF.HomeTeamId END AS OpponentId 1}}。然后你只需将它添加到你选择的字段列表中即可获得你想要的结果:

{{1}}