資料更新--sql
阿新 • • 發佈:2021-11-28
資料更新--sql
假設現在需要根據以下條件對該表的資料進行更新。
- 對當前工資為 30 萬日元以上的員工,降薪 10%。
- 對當前工資為 25 萬日元以上且不滿 28 萬日元的員工,加薪 20%。
傳統方法
-- 條件一 UPDATE `user` set salary = salary*0.9 WHERE salary < 300000.00; SELECT * FROM `user` -- 條件二 UPDATE `user` set salary = salary*1.2 WHERE salary > 250000.00 AND salary < 280000.00; SELECT * FROM `user`
上邊這種方法是不正確的
原因:例如這裡有一個員工,當前工資是 30 萬元,
按“條件 1”執行 UPDATE 操作後,工資會被更新為 27 萬元,
但繼續按“條件 2”執行 UPDATE 操作後,工資又會被更新為 32.4 萬元。
這樣,本來應該被降薪的員工卻被加薪了 2.4 萬元
即使將兩條 SQL 語句的執行順序顛倒一下,當前工資為 27 萬日元 的員工,其工資的更新結果也會出現問題。
為了避免這些問題,可以像下面這樣用 CASE 表示式來寫 SQL
CASE 表示式
-- 用 CASE 表示式寫正確的更新操作 UPDATE `user` SET salary = CASE WHEN salary >= 300000 THEN salary*0.9 WHEN salary >=250000 AND salary <280000 THEN salary*1.2 -- ELSE salary非常重要,必須 寫上 ELSE salary END; SELECT * FROM `user`;
注意
SQL 語句最後一行的 ELSE salary非常重要,必須 寫上。
因為如果沒有它,條件 1 和條件 2 都不滿足的員工的工資就會被更 新成 NULL。