使用另一个表中的随机值更新 MySQL 表的最佳方法

2024-02-27

对于这个(伪代码)示例,我在 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(使用前将#替换为@)

使用另一个表中的随机值更新 MySQL 表的最佳方法 的相关文章

随机推荐