使用SQL Server从另一个表更新多个列

15

我已经阅读了很多有关如何更新多个列的文章,但仍然找不到正确的答案。

我有一张表格,我想要从另一个表格中更新这个表格。

Update table1 
set (a,b,c,d,e,f,g,h,i,j,k)=(t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k)
from 
(
  SELECT ..... with join ... where .... 

) t2
    where table1.id=table2.id

如果我仅运行选择语句(括号中的内容),那么脚本会返回值,但在更新操作时却无法正常工作。

4个回答

18

TSQL不支持行值构造器。请使用以下方法代替:

UPDATE table1 
SET a = t2.a,
    b = t2.b,
    (...)
FROM 
(
SELECT ..... with join ... WHERE .... 
) t2
WHERE table1.id = table2.id

我们如何在SQLAlchemy中实现相同的功能? - newuser
engine.execute( """UPDATE table1 SET a = t2.a, b = t2.b, (...) FROM ( SELECT ..... with join ... WHERE .... ) t2 WHERE table1.id = table2.id""") - Sean

16

您无需使用子查询,也可以直接执行以下操作...

Update t1 
set t1.a  = t2.a
   ,t1.b  = t2.b
   ,t1.c  = t2.c
   ,t1.d  = t2.d
   .......
from table1 t1
JOIN table2 t2  ON t1.id = t2.id
WHERE .......

2
在最近(我想是2014年)的MS SQL Server版本中,我们尝试了这个操作,但它对目标字段上的“t1.”标识产生了阻碍。一旦我们移除了它们,更新就按预期工作了。我们使用了Inner Join而不仅仅是Join,所以可能会有所不同。因此,我们使用了“set a = t2.a等”这样的语句。 - Prof Von Lemongargle

1
上述解决方案仅适用于MSSQL。 对于MySql,您只需要首先声明表格。
UPDATE 
      table1 t1 ,table2 t2 
set 
      t1.field=t2.field 
where 
      t1.id=t2.id;

在我的情况下,这个起作用了..!!

0

UPDATE SET 命令隐式地应用于指定的表,不可能在 SET 操作中指定表。

编辑:只指定要更新的列名,不要提及表。


那么你能解释一下OP应该做什么吗? - Rob Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接