如何在MySQL的UPDATE语句中复用rand()函数的生成结果?
解决MySQL UPDATE时两列添加同一随机值的问题
嘿,这个坑我之前踩过!你原来的语句报错,是因为MySQL不允许在SET子句里直接引用同一句里定义的别名,而且子查询的写法也不符合语法规则。下面给你几种实用的解决办法,按需选择:
方法1:全局统一随机值(所有行加同一个随机数)
如果希望所有符合条件的行都加上同一个随机值,可以先用用户变量存储这个随机数,再执行更新:
-- 先生成并存储随机值(范围是5到10,因为FLOOR(5+RAND()*6)会生成5、6...10) SET @randValue = FLOOR(5 + (RAND() * 6)); -- 执行更新,两列都用同一个变量 UPDATE tableA SET hit_count = hit_count + @randValue, total_hit_count = total_hit_count + @randValue WHERE 1;
方法2:每行独立随机值(同一行两列加相同随机数)
如果需要每行生成一个独特的随机值,但同一行的两个列用同一个值,可以在SET子句里先给变量赋值,再复用这个变量:
UPDATE tableA SET hit_count = hit_count + (@rand := FLOOR(5 + (RAND() * 6))), total_hit_count = total_hit_count + @rand WHERE 1;
这里@rand会在每行更新时重新生成一次,但同一行的两个列会使用这个刚生成的相同值。
方法3:用JOIN子查询生成随机值
也可以通过JOIN一个只生成一次随机值的子查询来实现全局统一更新,效果和方法1一致:
UPDATE tableA JOIN (SELECT FLOOR(5 + (RAND() * 6)) AS randValue) AS r SET hit_count = hit_count + r.randValue, total_hit_count = total_hit_count + r.randValue WHERE 1;
简单总结下:
- 要所有行加同一个随机数:选方法1或方法3
- 要每行加不同的随机数但同一行两列相同:选方法2
内容的提问来源于stack exchange,提问作者Kabkee
相关产品推荐
相关产品推荐

