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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

用hibernate怎么修改指定字段的值

mysql批量修改字段动态内容的sql语句怎么写

线上排障技巧 | 动态修改LOGGER级别

mysql 修改字段内容

mysql数据库中sql修改字段类型要怎么做

2020-09-01 MySQL 修改表和表字段的类型