对于这个(伪代码)示例,我在 MySQL 中有两个表:
member { id, name }
names { name }
会员人数100人,姓名10人。我想使用名称中的随机名称来更新成员表。到目前为止我已经得到了这个,但是不确定是否有更好的方法来实现它。
UPDATE member SET name = (SELECT name FROM names ORDER BY RAND() LIMIT 1);
该代码将从脚本执行,因此我希望避免使用函数等。
提前致谢。
您可以通过将 id 列添加到您的名称表中并使用以下命令来避免通过 rand() 进行排序:
UPDATE member SET name = (SELECT name FROM names WHERE id=floor(1 + rand()*10 ) );
只有 10 个名称,结果不会快得多,但如果您想从更大的名称集中进行选择,您会看到差异,因为按 rand() 排序开始效率很低,而且您对members中的每一行都这样做。
更新:
看起来像 rand() 里面给出了不可预测的结果。
改用这个:
UPDATE member m1
JOIN ( select id, floor(1+rand()*10) as rnd from member ) m2 on m1.id=m2.id
JOIN names n on n.id = m2.rnd
SET m1.name=n.name
受影响的行数可能会有所不同,如果随机名称与表中已有的名称匹配,则不算作更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)