MariaDB条件更新语法报错求助:批量更新用户表字段
解决MySQL批量更新用户数据的语法问题
嘿,你的问题出在UPDATE语句的SET子句里的IF用法不对——MySQL不支持你这种直接在SET里写IF(条件, 字段=值, 字段=值)的写法,得把IF函数用来返回对应字段要更新的值,而不是直接写赋值语句。
我给你调整两种正确的写法,都能实现你的需求:
写法一:使用CASE WHEN(可读性更强)
UPDATE enterprise.gen SET bu_id = (SELECT MAX(b_id) FROM enterprise.bulk), date_fbulk = CASE WHEN date_fbulk IS NULL THEN NOW() ELSE date_fbulk END, date_lbulk = CASE WHEN date_fbulk IS NOT NULL THEN NOW() ELSE date_lbulk END ORDER BY RAND() LIMIT 10;
写法二:使用IF函数(更简洁)
UPDATE enterprise.gen SET bu_id = (SELECT MAX(b_id) FROM enterprise.bulk), date_fbulk = IF(date_fbulk IS NULL, NOW(), date_fbulk), date_lbulk = IF(date_fbulk IS NOT NULL, NOW(), date_lbulk) ORDER BY RAND() LIMIT 10;
逻辑说明:
- 对于
date_fbulk:如果它原本是NULL,就更新为当前时间;否则保持原来的值不变 - 对于
date_lbulk:只有当date_fbulk原本不是NULL的时候,才把它更新为当前时间;否则保持原值 - 完全保留了你原来的
bu_id赋值、随机排序和限制更新10条的逻辑
这样写就符合MySQL的语法规范啦,不会再报语法错误了~
内容的提问来源于stack exchange,提问作者Mathieu Chorier
相关产品推荐
相关产品推荐

