【问题标题】:Update multiple rows using CASE WHEN - ORACLE使用 CASE WHEN - ORACLE 更新多行
【发布时间】:2013-09-12 09:36:39
【问题描述】:

我有如下结构的表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

【问题讨论】:

  • 您要进行什么样的更新?将它们全部设置为相同的值?
  • @SarathiKamaraj 现在更新了,很抱歉造成混乱
  • @MultiThreader 现在更新了,很抱歉造成混乱
  • @hawk 你试过下面的 schurik 回答吗?我认为这可能会奏效......
  • 转到此链接-docs.oracle.com/cd/B19306_01/appdev.102/b14261/…,仔细阅读,确保您理解其中的每一点,然后编辑或关闭此问题。

标签: sql oracle


【解决方案1】:

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

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 条件

【讨论】:

  • @hawk 是的,它在小提琴中不起作用。我在我的 oracle apex apex.oracle.com 中尝试过它对我来说很好
  • 正确,我发现了 Fiddle 的问题,我应该运行 selectupdate,如果我单独运行它们,Fiddle 会回滚。谢谢
【解决方案2】:

试试下面的

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 )
;

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      换个方式

      WHEN ACCOUNT_STATUS = '004460721'
      

      WHEN ACCOUNT_ID = '004460721' 
      

      等等。在原代码中

      【讨论】:

        猜你喜欢
        • 2019-02-02
        • 1970-01-01
        • 2021-12-04
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 2012-05-07
        相关资源
        最近更新 更多