SQL Update& INNER JOIN

时间:2017-01-23 15:16:14

标签: sql sql-server sql-server-2008

我正在尝试更新数据库中的特定列(使用MSSQL)

我已经编写了一个查询来返回已经存在的值,但问题是我无法使用生成的值更新其他表(多行)我尝试使用变量声明它们然后更新表,但问题是它返回多个值,所以我想知道如何使用这些值更新表。

我的选择查询:

SELECT SUM(_Items.MagParam1) + SUM(_Items.MagParam2) AS Test11 
FROM _Char 
INNER JOIN _Inventory 
    ON _Char.CharID = _Inventory.CharID
INNER JOIN _Items 
    ON _Inventory.ItemID = _Items.ID64 
 WHERE _Inventory.Slot BETWEEN 1 AND 13  AND _Inventory.ItemID > 0
GROUP BY [_Char].[CharName16],[_Char].[CurLevel],[_Char].[CharID]

因此,此查询返回我拥有的每个CharID的值,我想更新_Char中的所有行,并使用上一个查询生成的值。

提前致谢=)

1 个答案:

答案 0 :(得分:1)

假设CharId是唯一的,我会做这样的事情:

update c
    ? = cc.test11  -- ? is the column to be updated
    from _Char c JOIN
         (SELECT c.CharID, SUM(i.MagParam1) + SUM(i.MagParam2) AS Test11 
          FROM _Char c INNER JOIN
               _Inventory i
              ON c.CharID = i.CharID INNER JOIN
              _Items it
              ON i.ItemID = it.ID64 
          WHERE i.Slot BETWEEN 1 AND 13  AND i.ItemID > 0
          GROUP BY c.CharID
         ) cc
         ON c.CharID = cc.CharID;

如果您需要所有三列(CharName16CurLevelCharID)来定义唯一行,请将其包含在SELECTGROUP BY中和ON条款。