4

ACCOUNT的结构表如下:

ACCOUNT_ID  | ACCOUNT_STATUS| 
004460721   |      2        | 
042056291   |      5        | 
601272065   |      3        | 

我需要使用一个语句一次更新三行,SELECT这样第二列将分别为 5、3、2。
我使用了以下查询,但似乎缺少一些东西

UPDATE ACCOUNT
SET ACCOUNT_STATUS = CASE   
WHEN ACCOUNT_STATUS = '004460721' THEN 5  
WHEN ACCOUNT_STATUS = '042056291' THEN 3  
WHEN ACCOUNT_STATUS = '601272065' THEN 2  
WHERE ACCOUNT_ID IN ('004460721','042056291','601272065')  

我的问题,这种方式正确吗?如果不是,我可以使用CASE WHEN语句以及如何或我只能选择使用SUB-SELECT来在一个语句中实现这一目标吗?
请注意,这是为了SQL ORACLE

4

4 回答 4

8

好的,根据你给的小提琴,我已经尝试过这些,它对我有用

create table account(  account_id number primary key,
                           account_status varchar2(30));

insert into account values(1, '5');
insert into account values(2, '3');
insert into account values(3, '2');

select * from account


update account
set account_status= case
when account_id=1 then '2'
when account_id=2 then '5'
when account_id=3 then '3'
END

select * from account

我没有使用 where 条件

于 2013-09-12T10:23:39.380 回答
4

尝试以下

update account
set account_status = CASE account_id 
                     WHEN 004460721 then 2 
                     WHEN 042056291 THEN 5 
                     WHEN 601272065 THEN 3 
                     END
WHERE account_id IN (004460721, 042056291, 601272065 )
;
于 2013-09-12T09:53:50.903 回答
3

虽然有点晚了,但我想在上述答案中补充一点。Where 条件很重要,因为没有它,查询将更新所有行。

于 2014-03-13T16:36:09.183 回答
1

怎么改

WHEN ACCOUNT_STATUS = '004460721'

WHEN ACCOUNT_ID = '004460721' 

等在原始代码中

于 2014-09-12T18:28:28.447 回答