如果你點進了這篇帖子,那么你一定遇到了跟我一樣的問題。別看題目的set case when...,我一開始也是第一反應是用case when但是發現並不好使。
問題呢,說得高大上一點:動態指定要修改的字段。
其實小白在這里並沒找到我以為的解決方法[笑哭],但是好歹問題是解決了。
這里是原帖的地址:
這里記錄一下方法,其實就是更新了你所有的可能要更新的值,在更新值的時候判斷這個字段是否 要更新,不更新則附上原值,更新則附上新值。[笑哭][笑哭][笑哭][笑哭][笑哭]
最后的成品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,批量修改。
工作中遇到的,希望能幫助同樣困惑的人
