如何根据从另一个表中选择的结果更新一个表中的列

Posted

技术标签:

【中文标题】如何根据从另一个表中选择的结果更新一个表中的列【英文标题】:How to update column in one table based on result of select from another table 【发布时间】:2020-05-03 18:53:34 【问题描述】:

我需要有关为 SQL Server 2008 编写脚本的帮助。

我有 2 个表,CharacterMEMB_INFO,我想自动运行此代码,作为 SQL Server 代理作业:

SELECT MasterResetCount
FROM character
WHERE MasterResetCount = 3 OR = 5 OR 7

并在同一代码中添加类似“IF”的内容

只有当 MasterResetCount = 3 或 = 5 或 7 并且 MasterResetCount 中存在 3,5,7 时才会进行测试

更新:

update MEMB_INFO 
set AccountLevel = 1

我很想得到帮助

我真的不懂写查询。

谢谢!

【问题讨论】:

您好 Aviad Levi,欢迎来到 Stack Overflow。你的解释比较不清楚。请提供两个表格中的示例数据和所需结果(均以表格文本形式)以帮助我们为您提供帮助。 请注意:SQL Server 2008 和 2008 R2 目前不再提供扩展支持 - red-gate.com/simple-talk/sql/database-administration/… - 是时候升级了! 【参考方案1】:

您可以在更新中使用 where 子句,仅当字符表中存在 MasterResetCount 值为 3、5 或 7 的任何记录时才执行更新。

update MEMB_INFO set AccountLevel = 1
where exists (select *
              from character
              where character.UserId = MEMB_INFO.UserId and
                    MasterResetCount in (3, 5, 7))

【讨论】:

感谢评论存在 在这里没有真正帮助 因为它会影响所有 AccountLevel 并将其更改为 1(在这种情况下,它会影响所有用户)我希望 AccountLevel 仅在以下情况下更新为 1 SELECT 的条件是在字符表中执行 MasterResetCount 3, 5, 7 并将 AccountLevel 更新为 1 仅对同一用户 His MasterResetCount Equals TO 3 OR 5 OR 7 @AviadLevi 请注意,您没有说任何关于用户的信息,当您需要帮助时,您必须提供所有需要帮助的信息。我已经更新了答案,所以现在您可以看到如何将 MasterResetCount 的状态仅过滤给 MEMB_INFO 的用户。问候。

以上是关于如何根据从另一个表中选择的结果更新一个表中的列的主要内容,如果未能解决你的问题,请参考以下文章

SQL:根据另一个表的计数结果更新一个表中的列

使用外键关系更新从另一个表中选择的电子邮件

从另一列计算的列?

仅当记录匹配时才从另一个表中更新记录

SQL INNER JOIN - 根据另一行的值从另一个表中选择数据

如何根据与另一个表中的值的比较来更新列