2014-06-14 44 views
1

我有多个更新查询。我想在一个声明中这样做。该查询是有没有办法将两个更新查询合并成一个?

update user set name = 'Something' where id = '1'; 
update user set name = 'Newthing' where id = '2'; 

我想是这样

update user set name = 'Something' where id = '1' && update user set name = 'Newthing' where id = '2'; 

回答

3

当然,仅仅使用一个CASE声明:

update user 
set name = 
    case when id = '1' then 'Something' 
     when id = '2' then 'Newthing' 
    end 
where id in ('1','2') 
+0

感谢,它的工作原理如下:D –

2

为补充sgeddes解决方案:

update user u 
join (select 1 as id,'Something' as name 
     union 
     select 2, 'Newthing') as t 
    on u.id = t.id 
     set u.name = t.name; 

请注意,这将o只能为MySQL工作。其他DBMS,例如Oracle,DB2,MSQL等实现MERGE这是一个标准建设:

merge into user u 
using (
    values (1,'Something') 
     , (2,'Newthing') 
) t (id, name) 
    on t.id = u.id 
when matched then 
    update set u.name = t.name 

通过增加一个条款,你还可以插入

when not matched then 
    insert (id, name) values (t.id, t.name) 

而且合并也可以删除行

+0

许多其他RDBMS也允许加入更新(依赖于版本,平台上的DB2也是如此)。合并是做别的事情 - 它插入行,如果他们不存在! –

+0

我应该提到插入与删除相同的方式,修正了这个问题。 – Lennart

+0

非常感谢你,这是非常友善的:) –

相关问题