1. 程式人生 > >【sql技巧】mysql修改時,動態指定要修改的字段 update `table` set (case when ....) = 1 where id = xx

【sql技巧】mysql修改時,動態指定要修改的字段 update `table` set (case when ....) = 1 where id = xx

幫助 ase stack pan 希望 需求 記錄 開始 lec

如果你點進了這篇帖子,那麽你一定遇到了跟我一樣的問題。別看題目的set case when...,我一開始也是第一反應是用case when但是發現並不好使。

問題呢,說得高大上一點:動態指定要修改的字段。

其實小白在這裏並沒找到我以為的解決方法[笑哭],但是好歹問題是解決了。

這裏是原帖的地址:

http://stackoverflow.com/questions/4830191/t-sql-using-a-case-in-an-update-statement-to-update-certain-columns-depending-o

這裏記錄一下方法,其實就是更新了你所有的可能要更新的值,在更新值的時候判斷這個字段是否 要更新,不更新則附上原值,更新則附上新值。[笑哭][笑哭][笑哭][笑哭][笑哭]

最後的成品sql如下:(需求背景是 當sender_id等於傳進來的userId時,更新send_status為2;當receiver_id等於userId時,更新receiver_status為2)

UPDATE message 
SET send_status = (CASE WHEN sender_id = #{userId, jdbcType=BIGINT} THEN 2 ELSE send_status END),
receive_status = (CASE WHEN receiver_id = #{userId, jdbcType=BIGINT} THEN 2 ELSE receive_status END
) WHERE dialog_id IN ( <foreach collection="list" item="item" index="index" separator="," >   #{item, jdbcType=BIGINT} </foreach> )

我這裏用的是mybatis,批量修改。

工作中遇到的,希望能幫助同樣困惑的人

【sql技巧】mysql修改時,動態指定要修改的字段 update `table` set (case when ....) = 1 where id = xx