Jam*_*mes 15 mysql random percentage
我想更新表中随机选择的50%的行.有没有办法做到这一点?
编辑:只是为了澄清它应该总是更新50%的记录,但是在那些50%的行中必须随机选择(例如,不仅仅是前50%).换句话说,在avarage中,每个其他记录都应该更新.
gex*_*ide 30
应该这样工作:
UPDATE table SET x = y WHERE RAND() < 0.5
Run Code Online (Sandbox Code Playgroud)
是的,经过测试,有效.但当然,它平均只有50%的行,而不是50%.
正如SQL 92规范中所写,WHERE必须为每个元组执行该子句,因此rand()必须重新评估该子句以产生预期结果(而不是根本选择所有行或不选择任何行).
摘自规范(强调我的):
通用规则
1)
<search condition>应用于T的每一行.结果<where clause>是T的那些行的表,其结果<search condition>为真.2)每个
<subquery>中的每一个<search condition>都有效地执行T的每一行和结果用于T<search condition>的给定行的应用.如果任何执行<subquery>包含对T列的外部引用,那么引用的值是T中给定行中的那一列
正如我所说,这是一个很长的路,用一种伪代码描述.)
$x = SELECT COUNT(*) FROM some_table;
@ids = SELECT id FROM some_table ORDER BY RAND() LIMIT $x / 2;
UPDATE some_table WHERE id IN (@ids);
Run Code Online (Sandbox Code Playgroud)