SQL Server中如何根据查询结果更新数据

开发人员在使用数据库的过程中经常使用的就是CRUD操作了,其中U便是指更新,可见更新数据也是经常使用的。在更新数据的时候我们可以给定指定的值,也可以和其他表进行关联,根据查询来进行更新。本文主要根据stackover:how-do-i-update-from-a-select-in-sql-server翻译而来,主要讲解sql server数据库中如何通过其他表的数据更新指定表。

原问题:

在SQL Server中可以将查询结果插入表中,比如:

INSERT INTO Table (col1, col2, col3)
SELECT col1, col2, col3 
FROM other_table 
WHERE sql = 'cool'

是否也可以根据查询结果进行更新数据?想根据临时表中的数据来更新另外一个表中的数据,SQL语句可能是这种形式:

UPDATE Table SET col1, col2
SELECT col1, col2 
FROM other_table 
WHERE sql = 'cool'
WHERE Table.id = other_table.id

采纳答案:

UPDATE
    Table_A
SET
    Table_A.col1 = Table_B.col1,
    Table_A.col2 = Table_B.col2
FROM
    Some_Table AS Table_A
    INNER JOIN Other_Table AS Table_B
        ON Table_A.id = Table_B.id
WHERE
    Table_A.col3 = 'cool'

运行SQL语句

其他优质答案:

SQLServer 2008之后的版本,可以使用MERGE方式

MERGE INTO YourTable T
   USING other_table S 
      ON T.id = S.id
         AND S.tsql = 'cool'
WHEN MATCHED THEN
   UPDATE 
      SET col1 = S.col1, 
          col2 = S.col2;

运行SQL语句,实际运行语句做了一些调整。

或者

MERGE INTO YourTable T
   USING (
          SELECT id, col1, col2 
            FROM other_table 
           WHERE tsql = 'cool'
         ) S
      ON T.id = S.id
WHEN MATCHED THEN
   UPDATE 
      SET col1 = S.col1, 
          col2 = S.col2;

运行SQL语句 ,实际运行语句做了一些调整。

个人更习惯这种更新方式,如下:

update Some_Table
set col1 = t.col1,
col2 = t.col2
from Other_Table as t
where t.id= Some_Table.id
and Some_Table.col3 = 'cool';

运行SQL语句

本文根据StackOverflow翻译而来,不代表烟海拾贝立场,如若转载,请注明出处:https://somirror.com/597.html

(0)
上一篇 2022-02-24 16:02
下一篇 2022-02-25 11:38

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注