首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单个查询中的多列更新

单个查询中的多列更新
EN

Stack Overflow用户
提问于 2014-03-29 03:30:53
回答 2查看 64关注 0票数 1

我可以用一个更新查询来更新不同表中的两列吗?我陷入了这样的境地:

表1:

代码语言:javascript
复制
case id    client id   created by
1           a          john  
2           b          Mike   
3           c          Raghu
4           b          Mike

表2:

代码语言:javascript
复制
case id    client id     case cost
2           b             5,000
3           j            10,000
4           b             6,000  

问题是,我想要更新由Mike创建的两个表中的客户端id=d。

我可以通过mike创建的join获取这些案例,但是也可以使用sql join来更新它们吗?

EN

回答 2

Stack Overflow用户

发布于 2014-03-29 03:37:14

在一条语句中对更多更新的答案是否定的。虽然可以在update语句的from子句中输入多个表,但只能在update关键字后指定单个表。即使您确实编写了一个“可更新”视图(这只是一个遵循某些限制的视图),像这样的更新也会失败。

要修复此问题

使用事务块:

示例:

代码语言:javascript
复制
    BEGIN TRANSACTION

    update A
    set A.client_id =  'd'
    from table1 A inner join table2 B
    on B.client_id = A.client_id
where a.created_by='mike'

    update B
    set B.client_id = 'd'
    from table2 B inner join table1 A
        on B.client_id = A.client_id
        where a.created_by='mike'


    COMMIT
票数 1
EN

Stack Overflow用户

发布于 2014-03-29 03:36:37

也许像这样的东西会起作用。

代码语言:javascript
复制
UPDATE table1,table2 SET table1.client_id='d',table2.client_id='d'
WHERE table1.client_id=table2.client_id;

由于您将RDBMS称为MSSQL 2012,因此只能有一条update语句。您可以使用另一个答案(OR)中提到的多个in transaction块

创建一个过程,并将两个update语句包装在那里,如下所示

代码语言:javascript
复制
create procedure update_table1_table2
as 
begin
UPDATE table1 SET client_id='d' WHERE client_id='b';
UPDATE table2 SET client_id='d' WHERE client_id='b';
end

然后像这样调用你的过程

代码语言:javascript
复制
exec update_table1_table2 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22721603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档