首页 > 代码库 > 【sql技巧】mysql修改时,动态指定要修改的字段 update `table` set (case when ....) = 1 where id = xx

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

如果你点进了这篇帖子,那么你一定遇到了跟我一样的问题。别看题目的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