SQL Server 使用SQL进行批量记录更新

8wtpewkr  于 2022-12-22  发布在  其他
关注(0)|答案(6)|浏览(268)

我在SQL Server 2008环境中有两个表,结构如下

Table1
- ID
- DescriptionID
- Description

Table2
- ID
- Description

Table1.DescriptionIDMap到Table2.ID。但是,我不再需要它了。我希望执行批量更新,将Table1的Description属性设置为Table2中与之关联的值。换句话说,我希望执行如下操作:

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

但是,我不确定这是不是合适的方法。有人能告诉我怎么做吗?

ghg1uchk

ghg1uchk1#

你的方法是正确的,下面是你可以做到的另一种方法:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID

嵌套的选择是执行连接的一个很长的方法。

z18hc3ub

z18hc3ub2#

你的方法是可以的
也许稍微清楚一点(反正对我来说!)

UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID

这个查询和您的查询应该运行相同的性能,因为它是相同的查询,只是布局不同。

ctrmrzij

ctrmrzij3#

您可以使用JOIN通过常规UPDATE来完成此操作

UPDATE T1
SET Description = T2.Description
   FROM Table1 T1
      JOIN Table2 T2
         ON T2.ID = T1.DescriptionId
9avjhtql

9avjhtql4#

或者您可以直接更新而不使用join,如下所示:

Update t1 set  t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
fnx2tebb

fnx2tebb5#

您在问题中发布的SQL是一种方法,SQL中的大多数内容都有不止一种方法。

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

如果你打算在一个PROD数据库上运行它,最好先创建一个快照或镜像,然后测试它。验证数据是否如你所期望的那样结束了几个记录。如果你满意,在真实的的数据库上运行它。

h4cxqtbf

h4cxqtbf6#

$subQuery = DB::table('table1')
        ->selectRaw("DISTINCT ON (col) *");
    DB::table('table2')
        ->joinSub($subQuery, 'table2', 'table2.id', 'table1.id')
        ->update([
            'col' => DB::raw("table2.value")
        ]);

相关问题