【问题标题】:SQL Server : update from one table with Select and Join two another tableSQL Server:从一个表更新选择并加入另外两个表
【发布时间】:2015-04-08 18:26:36
【问题描述】:

我有两张桌子:

团队

Id  Name
1   Manchester
2   Arsenal
3   Inter
4   Milan

游戏

GameId  FirstTeamId GoalsFirstTeam  GoalsSecondTeam SecondTeamId
1            1            0                 0             2
2            3            2                 3             4
3            1            1                 1             3

我想从两个表GamesTeams 中选择并加入GameResult,如下所示:

GameId  FirstTeam   GoalsFT GoalsST SecondTeam
1       Manchester    0        0     Arsenal
2       Inter         2        3     Milan
3       Manchester    1        1     Inter

我试过了:

UPDATE GameResult
SET    GameId = (SELECT GameId
                 FROM   Games),
       FirstTeam = (SELECT t1.Name AS FirstTeam
                    FROM   Games AS g
                           INNER JOIN Teams t1
                                   ON g.FirstTeamId = t1.Id),
       GoalsFT = (SELECT GoalsFirstTeam
                  FROM   Games),
       GoalsST = (SELECT GoalsSecondTeam
                  FROM   Games),
       SecondTeam = (SELECT t2.Name AS SecondTeam
                     FROM   Games AS g
                            INNER JOIN Teams t2
                                    ON g.SecondTeamId = t2.Id) 

...但是没有用。

有人可以帮我吗?

【问题讨论】:

  • 你真的需要GameResult表吗?
  • 是的,因为有了GameResult更容易工作,处理结果

标签: sql-server select join sql-update


【解决方案1】:

简单的解决方案:

从游戏结果中删除 走 插入 GameResult (GameId, FirstTeam,GoalsFT,GoalsST,SecondTeam) 选择 g.GameId, t1.Name AS FirstTeam, g.GoalsFirstTeam,g.GoalsSecondTeam, t2.Name AS SecondTeam 来自游戏 g 内部加入团队 t1 ON g.FirstTeamId = t1.Id INNER JOIN 团队 t2 ON g.SecondTeamId = t2.Id

【讨论】:

    【解决方案2】:

    试试这个

    UPDATE GameResult
    SET GameId = G.GameId,
           FirstTeam = T1.Name,
           GoalsFT = G.GoalsFirstTeam,
           GoalsST = G.GoalsSecondTeam,
           SecondTeam = T2.Name 
     FROM Games G INNER JOIN Teams T1 ON G.FirstTeamID=T1.ID
            INNER JOIN Teams T2 ON G.SecondTeamId=T2.ID
    

    更新:

    如果您只想从其他 2 个表中将新记录插入到 GameResult 中,试试这个

    INSERT GameResult (GameId, FirstTeam, GoalsFT, GoalsST, SecondTeam)
    SELECT G.GameId, T1.Name, G.GoalsFirstTeam, G.GoalsSecondTeam, T2.Name 
     FROM Games G INNER JOIN Teams T1 ON G.FirstTeamID=T1.ID
            INNER JOIN Teams T2 ON G.SecondTeamId=T2.ID
    

    【讨论】:

    • 哦..你写了你想更新,我现在意识到你只是想插入新记录,对吧?
    【解决方案3】:

    您的表“GameResult”似乎没有任何记录要更新。要么先填写,然后使用 Pupa Rebbe 的上述解决方案,要么使用Merge 语句插入、更新和(如果需要)删除记录。

    欲了解更多信息,请参阅this MS library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多