Oracle更新包含多个WHERE子句的单个表

时间:2013-10-17 09:26:36

标签: oracle

刚刚在我们的11g中进行了一些数据迁移并发现了一种情况,我通常会创建一些单独的UPDATE脚本并开始思考。有没有办法在同一个脚本中使用不同的WHERE子句进行多个更新?

我的意思是代替

UPDATE table1 SET value1=X WHERE value1=A;
UPDATE table1 SET value1=Y WHERE value1=B;
UPDATE table1 SET value1=Z WHERE value1=C;

你能做点什么吗

UPDATE table1 SET value1=X WHERE value1=A,SET value1=Y WHERE value1=B, SET value1=Z WHERE value1=Z;

显然上面的语法是错误的,但这是我的观点。可以这样做,或者你只需​​要做三个单独的脚本吗?

提前致谢

KS

3 个答案:

答案 0 :(得分:3)

UPDATE table1 SET value1 = CASE
           WHEN value1=A THEN X
           WHEN value1=B THEN Y ELSE XYZ
        END;

答案 1 :(得分:1)

使用CASE表达式:

update table1
set value1 = case
        when value1 = A then X
        when value1 = B then Y
        when value1 = C then Z
    end
where
value1 in (A, B, C);

答案 2 :(得分:1)

OR DECODE()。

update table1 set
value1 = decode(value1, A, X
                      , B, Y
                      , C, Z
                         , value1
               )
where value1 in (A, B, C);