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

Ian*_*Ian 5 mysql

对于这个(伪代码)示例,我在 MySQL 中有两个表:

member { id, name }
names { name }
Run Code Online (Sandbox Code Playgroud)

会员100人,姓名10人。我想使用名称中的随机名称来更新成员表。到目前为止,我已经有了这个,但是,不确定是否有更好的方法来实现它。

UPDATE member SET name = (SELECT name FROM names ORDER BY RAND() LIMIT 1);
Run Code Online (Sandbox Code Playgroud)

代码将从脚本中执行,因此我希望避免使用函数等。

提前致谢。

pio*_*trm 5

您可以通过将 id 列添加到您的名称表并使用以下命令来避免按 rand() 排序:

UPDATE member SET name = (SELECT name FROM names WHERE id=floor(1 + rand()*10 ) );
Run Code Online (Sandbox Code Playgroud)

只有 10 个名称,结果不会快得多,但是如果您想从更大的名称集中进行选择,您会看到不同之处,因为按 rand() 排序开始效率很低,而且您对成员中的每一行都这样做.

更新:似乎 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
Run Code Online (Sandbox Code Playgroud)

受影响的行数可能会有所不同,如果随机名称与表中已有的名称匹配,则不计为更新。