请教这个根据条件判断 UPDATE 的语句错在哪里?(UPDATE & WHEN),另请教一个进阶的语法。。。

2021-03-04 10:21:01 +08:00
 qazwsxkevin
UPDATE `testppp`.`datatbl`` SET `phasea` = (CASE `phasea` 
WHEN NULL THEN '5'
    END)
WHERE (`type`='2' AND `typeid`='6627');

第一个问题
如果 phasea 字段是 Null,就把它设置为 5,WHERE 是匹配条件
测试结果是:

Query OK, 0 rows affected (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

有匹配,没发生改动,确定 phasea 是 Null 的。。。

第二个进阶问题是:
在此基础上,如果有发生了 SET 值这个事情,就把 UpdateTime 设置为 now()
如果没有 UPDATE,什么都不变动。。。

1509 次点击
所在节点    MySQL
6 条回复
weizhen199
2021-03-04 10:27:52 +08:00
为啥要这么写。

....set phasea =5 where phasea is null

qazwsxkevin
2021-03-04 10:30:21 +08:00
@weizhen199 因为还会有其它字段的判断加入进来,在一条语句里面完成的呀,不只是这个字段的判断,我是试着写了一个测试先,反复看了几次语句的教学,也折腾不出来。。。。
eason1874
2021-03-04 10:32:20 +08:00
可以用 IFNULL

UPDATE `testppp`.`datatbl`` SET `phasea` = IFNULL(`phasea`, '5') WHERE `type`='2' AND `typeid`='6627';

最好还是可以按条件选出来直接修改

UPDATE `testppp`.`datatbl`` SET `phasea` = '5' WHERE `type`='2' AND `typeid`='6627' AND `phasea` IS NULL;
killergun
2021-03-04 10:43:13 +08:00
第二个进阶问题: DateTime 可以设置 ON UPDATE CURRENT_TIMESTAMP 默认值行为
qazwsxkevin
2021-03-04 10:48:09 +08:00
谢谢各位,如果是 IFNULL 或者 WHERE 判断对单个值判断,一行数据(多个值)的判断,也许就要组装 10 几条语句去完成,还是想学习一下 CASE WHEN 的方式,一行语句完成,因为组装好的语句,是通过队列去操作 MYSQL 的,所以一行语句比较符合预期。。。
smilenceX
2021-03-04 10:48:23 +08:00
第一个问题:
你可以用 case when phasea is null then 这种写法
你那个写法的值不能是 null,具体可以查 mysql 官方文档,我不能贴链接,会被 v 站要求验证手机号。
第二个问题可以考虑用 trigger 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/758302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX