有人在群里问mysql如何选择性更新部分条件的问题
2018-02-22 16:11
369 查看
有人在群里问这个问题
update xt_kh set zhye=zhye+1,hzyj=hzyj+1 where dlgh='kiss0451' and hzms=1
如果这样写 hzms不等于1的时候 zhye字段也不更新了,
我想要的是 zhye 必须更新,而hzyj是选择性的,怎么用update来实现啊?
他提出根据hzms进行部分更新,那么主条件是dlgh='kiss0451' 是必须确定的,如此以来,这个 hzms 就不能作为条件子句了,有人提出用两条语句实现,不过他说必须用一条,嗯哼,看来是有点麻烦的。
根据条件进行判断,那么我就自然而然的想到可以用if表达式进行实现
效果如下
SQL如下:
这里面的问题就在于,要先将 zhye的条件确定好,这个是必然要更新,然后 hzyj要部分更新,那么关键就在于根据hzms进行判断 如果等于1 则更新加1 否则还是自身,这是问题的核心,其实更新为自身也是更新,只不过影响行数没变而已,对于用户而言好像是没更新,其实对于数据库而言,是更新了。而对于SQL而言也是一条SQL就实现了需求了。
update xt_kh set zhye=zhye+1,hzyj=hzyj+1 where dlgh='kiss0451' and hzms=1
如果这样写 hzms不等于1的时候 zhye字段也不更新了,
我想要的是 zhye 必须更新,而hzyj是选择性的,怎么用update来实现啊?
他提出根据hzms进行部分更新,那么主条件是dlgh='kiss0451' 是必须确定的,如此以来,这个 hzms 就不能作为条件子句了,有人提出用两条语句实现,不过他说必须用一条,嗯哼,看来是有点麻烦的。
根据条件进行判断,那么我就自然而然的想到可以用if表达式进行实现
效果如下
SQL如下:
update xt_kh set zhye=zhye+1,hzyj=if(hzms=1,hzyj+1,hzyj) where dlgh='kiss0451'
这里面的问题就在于,要先将 zhye的条件确定好,这个是必然要更新,然后 hzyj要部分更新,那么关键就在于根据hzms进行判断 如果等于1 则更新加1 否则还是自身,这是问题的核心,其实更新为自身也是更新,只不过影响行数没变而已,对于用户而言好像是没更新,其实对于数据库而言,是更新了。而对于SQL而言也是一条SQL就实现了需求了。
相关文章推荐
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- 如何解决MySQL插入部分中文字符的报错问题
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- Mysql的XML字段部分结点更新问题
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- MySQL 如何在一个语句中更新一个数值后返回该值 -- 自增长种子竞态问题处理
- 如何解决从mysql中读取数据时显示为乱吗的问题.
- 如何解决MySQL导入大数据出现的问题
- 一场讨论引起的问题——如何保存和即时更新用户信息?
- ABAP--在查询条件只包含部分索引字段时,如何使用索引
- 查询的条件和需要什么样的结果如何通知后台服务类的问题
- 新手求助:测试连接MYSQL时提示如下,请教问题出在哪?如何解决?
- MySQL的用户权限设置问题(如何解决Access denied)
- ABAP--在查询条件只包含部分索引字段时,如何使用索引
- linq更新部分数据时遇到的问题及解决办法
- 在WSUS 3.0的环境中,部分客户机没有向WSUS服务器更新状态,该如何解决?
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- ABAP--在查询条件只包含部分索引字段时,如何使用索引