在SQL中更新多个列

Joe*_*Joe 155 sql sql-server sql-update

有没有办法在SQL服务器中更新多个列,就像使用insert语句一样?

就像是:

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 table2 t2
where table1.id=table2.id
Run Code Online (Sandbox Code Playgroud)

或类似的东西,而不是像这样:

update table set a=t2.a,b=t2.b etc 
Run Code Online (Sandbox Code Playgroud)

如果你有100多列,写起来可能很烦人.

mar*_*c_s 192

试试这个:

UPDATE table1 
SET a = t2.a, b = t2.b, .......
FROM table2 t2
WHERE table1.id = t2.id
Run Code Online (Sandbox Code Playgroud)

这应该适用于大多数SQL方言,不包括Oracle.

是的 - 这是很多打字 - 这是SQL做到这一点的方式.

  • 你好.你是对的,但我只是想说它不适用于任何SQL方言. (14认同)
  • 这在Oracle中不起作用:http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj26498.html (3认同)
  • 适用于MySQL. (2认同)

gbn*_*gbn 82

"厌倦的方式"是标准的SQL以及主流RDBMS如何做到这一点.

有100多列,你很可能有一个设计问题......还有,客户端工具中有缓解方法(例如生成UPDATE语句)或使用ORMs

  • 那么在MSSQL中没有其他方法可以做到这一点? (5认同)
  • @Joe:没有.请参阅下面的Alex K的答案(http://stackoverflow.com/a/9079904/27535),有一个要求MS添加它的请求 (4认同)

Ale*_* K. 21

Update table1 set (a,b,c) = (select x,y,x)语法是使用行值构造的一个例子,Oracle支持此,MSSQL没有.(连接项目)


Joh*_*Woo 18

您的查询几乎正确.这个T-SQL是:

UPDATE  Table1
SET     Field1 = Table2.Field1,
        Field2 = Table2.Field2,
        other columns...
FROM    Table2
WHERE   Table1.ID = Table2.ID
Run Code Online (Sandbox Code Playgroud)


bet*_*nzi 13

句法

UPDATE table-name 
SET column-name = value, column-name = value, ...
WHERE condition
Run Code Online (Sandbox Code Playgroud)


UPDATE school
SET course = 'mysqli', teacher = 'Tanzania', student = 'you'
WHERE id = 6
Run Code Online (Sandbox Code Playgroud)


Tha*_*amy 8

   UPDATE t1 
    SET 
    t1.a = t2.a,
    t1.b = t2.b,
    .
    .
    .


    FROM 
    table1 t1 
    INNER JOIN table2 t2 ON  t1.id=t2.id
Run Code Online (Sandbox Code Playgroud)

你可以试试这个


Pet*_*ter 5

我尝试过这种方式并且它工作正常:

UPDATE 
  Emp
SET 
  ID = 123, 
  Name = 'Peter' 
FROM 
  Table_Name
Run Code Online (Sandbox Code Playgroud)

  • 这对于我的 PostgreSQL 12.2 安装(使用 DBeaver 测试)似乎工作得很好。 (2认同)