如何交换单列的更新值

时间:2016-05-15 12:18:41

标签: oracle

id   sal 
101  5000
102  9000

我想要更新sal列,如

id   sal 
101  9000
102  5000

2 个答案:

答案 0 :(得分:2)

UPDATE emp x
   SET sal =
          (SELECT sal
             FROM emp
            WHERE id = DECODE (x.id, :id1, :id2, :id1) )
 WHERE id IN ( :id1, :id2)

答案 1 :(得分:1)

假设从具有两列(id和sal,以及30,000行)的表中分配#34;编写一个查询,在id = 101和id = 102"之间交换工资,这样的事情应该有效:

update zz set sal = case id when 101 then (select sal from zz where id = 102)
                            when 102 then (select sal from zz where id = 101)
                            end
where id in (101, 102);

编辑:正如Mottor在他对这个问题的回答中所表明的那样,该陈述可以更简洁地写成,如下所示。 (请注意,我更喜欢在DECODE上使用CASE表达式 - 我认为它更易于阅读和维护。)

update zz x set sal = (select sal from zz where id = case x.id when 101 then 102 
                                                               when 102 then 101 end)
where id in (101, 102);