2016-05-15 29 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)