我在SQL Server 2008环境中有两个具有以下结构的表
Table1
- ID
- DescriptionID
- Description
Table2
- ID
- Description
Table1.DescriptionID映射到Table2.ID。但是,我不再需要了。我想进行批量更新,将Table1的Description属性设置为Table2中与之关联的值。换句话说,我想做这样的事情:
UPDATE
[Table1]
SET
[Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
但是,我不确定这是否是合适的方法。有人能告诉我怎么做吗?
答案 0 :(得分:38)
做到:
update Table1
set Description = t2.Description
from Table1 t1
inner join Table2 t2
on t1.DescriptionID = t2.ID
答案 1 :(得分:25)
你的方法没问题
也许稍微清楚一点(对我来说!)
UPDATE
T1
SET
[Description] = t2.[Description]
FROM
Table1 T1
JOIN
[Table2] t2 ON t2.[ID] = t1.DescriptionID
这个和你的查询应该运行相同的性能,因为它是相同的查询,只是以不同的方式布局。
答案 2 :(得分:3)
您可以通过UPDATE
JOIN
来完成此操作
UPDATE T1
SET Description = T2.Description
FROM Table1 T1
JOIN Table2 T2
ON T2.ID = T1.DescriptionId
答案 3 :(得分:2)
或者你可以直接更新而不使用像这样的连接:
Update t1 set t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
答案 4 :(得分:0)
您在问题中发布的SQL是一种方法。 SQL中的大多数内容都有多种方法可以实现。
UPDATE
[Table1]
SET
[Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
如果您计划在PROD数据库上运行此操作,最好先创建快照或镜像并进行测试。验证数据最终会像您期望的那样记录几次。如果您满意,请在真正的数据库上运行它。