有人在群里问mysql如何选择性更新部分条件的问题

有人在群里问这个问题

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就实现了需求了。

原文地址:https://www.cnblogs.com/lizhaoyao/p/8459242.html