如果你点进了这篇帖子,那么你一定遇到了跟我一样的问题。别看题目的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,批量修改。
工作中遇到的,希望能帮助同样困惑的人
时间: 2024-10-10 12:23:45