2016-05-15 53 views
-1
id sal 
101 5000 
102 9000 

我想更新SAL柱像如何交换单列的更新值

id sal 
101 9000 
102 5000 
+0

这是没有意义的。请更具体一些。 – shadow

+0

只是:'update table_name set id = sal,sal = id;' – krokodilko

+0

你需要做什么 - 在两个id之间切换两个薪水?如果桌子上有30,000个ID,你想切换哪个?工作分配是“我给你两个身份证,我希望你在这两个人之间换工资”? – mathguy

回答

1

假设分配“从表中有两列,ID和SAL,30000行,编写一个查询该交换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这个问题,声明CA写得更简洁,如下所示。 (请注意,我更喜欢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); 
2
UPDATE emp x 
    SET sal = 
      (SELECT sal 
      FROM emp 
      WHERE id = DECODE (x.id, :id1, :id2, :id1)) 
WHERE id IN (:id1, :id2)