Oracle 如何交换单列的更新值

Oracle 如何交换单列的更新值,oracle,Oracle,我想更新sal专栏,比如 id sal 101 5000 102 9000 假设分配是“从一个包含两列id和sal以及30000行的表中,编写一个在id=101和id=102之间交换工资的查询”,类似这样的操作应该可以: id sal 101 9000 102 5000 编辑:正如莫特在回答这个问题时所证明的那样,陈述可以写得更简洁,如下所示。(请注意,我更喜欢使用大小写表达式而不是解码-我认为它更易于阅读和维护。) 这毫无意义。请更具体一点。只需:updatetable

我想更新sal专栏,比如

id   sal 
101  5000
102  9000

假设分配是“从一个包含两列id和sal以及30000行的表中,编写一个在id=101和id=102之间交换工资的查询”,类似这样的操作应该可以:

id   sal 
101  9000
102  5000
编辑:正如莫特在回答这个问题时所证明的那样,陈述可以写得更简洁,如下所示。(请注意,我更喜欢使用大小写表达式而不是解码-我认为它更易于阅读和维护。)


这毫无意义。请更具体一点。只需:
updatetable\u name set id=sal,sal=id你需要做什么-在两个id之间切换两个工资?如果表中有30000个id,您希望切换哪些id?任务是“我给你两个身份证,我想让你在这两个身份证之间转换工资”吗?
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);
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);
UPDATE emp x
   SET sal =
          (SELECT sal
             FROM emp
            WHERE id = DECODE (x.id, :id1, :id2, :id1) )
 WHERE id IN ( :id1, :id2)