将A列复制到B列并重新排序A列

时间:2011-11-10 17:50:27

标签: mysql

UPDATE `ph3`.`member` SET `name` =  (select Sname from member  order by rand())

我想将Sname复制到name,我想重新排序列Sname

2 个答案:

答案 0 :(得分:1)

您无法将多个值传递给update语句的单个set字段,如果您希望查询起作用,则必须将结果限制为仅一个记录,因此:

UPDATE `ph3`.`member` SET `name` =  (select Sname from member  order by rand() LIMIT 1);

此查询使用从成员表中检索的随机名称更新名称字段。

答案 1 :(得分:1)

首先,您不应该对基于同一个表中的select(即:member)的表进行更新。

至于重新排序列名,您无需尽可能实际更改记录 除了在任何查询中使用ORDER BY子句外,只需在名称上使用索引。

最后,如果您根据random()的更新命令进行操作,则有一些强烈的可能性,即某些名称将不仅仅是重复的,而其他名称将完全丢失...更新会在时间。所以,如果你有“A”,“B”,“C”,“D”,“E”和“F”这样的名字......

然后你的random()首先返回“E”,然后记录1变为“E”,“A”现在消失,然后B被处理并且用“D”变为rand,现在“B”消失并变为“ D“... C的时间,它得到随机D(例如:原始B位置),现在又是”D“等......

如果您正在尝试创建一个随机混乱的名称,我建议将结果复制到一个随机排序的测试表中,然后在开始之前根据与原始ID相同的ID号加入。 / p>