【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,批量修改。

工作中遇到的,希望能帮助同样困惑的人

时间: 2024-10-10 12:23:45

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

c#开发的程序安装时动态指定windows服务名称

转自:http://www.jb51.net/article/30549.htm 前段时间由于项目的需求,要在Windows里把同样的组件制作成多个不同名称的服务,这些服务完成类似的功能,仅需要修改业务配置文件 这下可把我难住了,难道要 在开发的代码中一个一个地设置想要的名称,然后重新编译,再注册成服务? 但是如果将来又要换个名称呢?再重新设置. 编译.注册一遍?这样操作太麻烦了! 于是我就想能不能通过在安装的时候进行配置,比如加一个xml文件记录要安装的服务的服务名等信息,每次安装前修改该xm

打包时动态指定一些值

最近项目要上线了,所以经常需要打包.apk进行测试. 那么就有一个问题:有时候需要本地环境,有时候需要测试环境,还有生产环境,这些环境的一些baseUrl,证书文件(.der)都不同.在修改的时候要改好几个地方,不太方便,而且容易忘记. 能不能只改一个地方呢?那是必须可以的. 在build.gradle文件中: defaultConfig { buildConfigField("String", "BaseUrl", "\"https://192

sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差

函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时. //UPLOAD_TIME 减去 CREATE_DTTM 求得时间差,以分钟数计时 select avg(TIMESTAMPDIFF(MINUTE,CREATE_DTTM,UPLOAD_TIME)) value,LEFT(CREATE_DTTM,10) time from 表名 WHERE CREATE_DTTM >= '2018-01-21' AND CREATE_DT

Ubuntu14.04 如何修改/etc/sudoers 和错误修改权限的解决办法

开始学习hadoop啦!!! 在Ubuntu14.04上新建了一个名为hadoop的用户,但总是遇到各种权限问题,于是就想干脆把这个账户变成root账户. 网上查到说是直接修改/etc/sudoers,修改时提示read-only,修改不了,自然而然想到去修改文件的权限, sudo chown u+w /etc/sudoers,修改好了后发现sudo su要报错. 解决的办法是进入到Ubuntu的recovery mode中的root shell进行修改,遇到了和http://www.cnblo

mysql基础操作、sql技巧和sql的常见优化

一.常见操作 1.复制表结构create table t2 like t1 复制表数据insert into t2 select * from t1 2.mysql索引 alter table用来创建普通索引.unique索引或primary key索引 alter table t add index index_name(column_list) alter table t add unique(column_list) alter table t add primary key(column

LINQ to SQL 运行时动态构建查询条件

在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句更麻烦一些.本文介绍了3种运行时动态构建查询条件的方法. 本文中的例子最终实现的都是同一个功能,从Northwind数据库Customers表中搜索出CompanyName列带有keywords中任意元素的项.keywords是个字符串数组,该数组长度在编译时是不确定的.思路及方法说明写在代码注释中. 1.表达式树 1   public static IEnumerable<Customers> 

文件重命名之动态修改ListView里指定Item中的组件属性

在Android实际开发过程中经常会遇到,修改ListView中某一项的值.如何达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,重新加载数据已达到更新ListView的目的. 虽然第一种方式能够解决问题,但不值得推荐.因为这样会带来不必要的资源消耗.在移动终端这种硬件资源和计算能力都有限的情况下,显然有点得不偿失了,况且用户的体验也不好. 第二种方式:第二种方式可以说是第一种方式的改进.ListView中某一项的值发生改变,实际上是ListView的数

转: gcc 指定运行时动态库路径

gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录下如 /home/youname/lib,可是怎么编译才能让程序正常编译,并且正常运行呢.这样使用gcc:gcc -I/path/to/include/dir -L/path/to/lib/dir -llibname -Wl,-rpath,/path/to/lib/dir -o test test.

provider SQL Network Interfaces error 26 - 定位指定的服务器/实例时出错

1.错误描述 =================================== 无法连接到 SKY-20160824VTF\SQLEXPRESS. =================================== 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: SQL Network Interfaces, error: 26 - 定位指定