我的结构表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
答案 0 :(得分:7)
好的,基于你给我的小提琴,我已经尝试了这些,它对我有用
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条件
答案 1 :(得分: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 )
;
答案 2 :(得分:3)
虽然有点迟,但我想在上述答案中加一点。 Where条件重要,因为除此之外,查询将更新所有行。
答案 3 :(得分:1)
如何改变
WHEN ACCOUNT_STATUS = '004460721'
到
WHEN ACCOUNT_ID = '004460721'
等。在原始代码中