Sql重命名几个原始数据

时间:2014-11-06 15:46:11

标签: mysql sql duplicates

我已经通过这里发布的一些解决方案,但没有一个解决了我的问题。

我想设置我的用户名列以接收现在唯一的用户名。

但为此,我需要在某些情况下重命名,已经注册了1000多个重复的用户名。

我尝试了这个解决方案:

UPDATE profile n
JOIN (SELECT username, MIN(profile_id) min_id FROM profile
      GROUP BY username HAVING COUNT(*) > 1) d
ON n.username = d.username AND n.profile_id <> d.min_id SET n.username = CONCAT(n.username, '1'); 

但是它给了我相同的用户名,例如tony,tony1,tony11,tony111等等,直到tony1111111111111 ......最多1000个,使用户名长有很长的长度。

我想要一个解决方案,在用户名字后只获得4digites。 0001,0002,0003,0004 .... 1000

有人可以帮助我吗?

提前谢谢

2 个答案:

答案 0 :(得分:1)

如下:

UPDATE profile n JOIN (
    SELECT profile_id, username, (@row_number:=@row_number+1) as cntr 
    FROM profile,  (SELECT @row_number:=0) AS t 
    WHERE username IN ( SELECT username 
                FROM profile 
                GROUP BY username HAVING COUNT(*) > 1 )
            and (username, profile_id) not in ( SELECT username, MIN(profile_id)
                FROM profile 
                GROUP BY username HAVING COUNT(*) > 1 )
    ) d ON n.profile_id = d.profile_id 
SET n.username = CONCAT(n.username, d.cntr); 

这是我现在能想到的最好的......问题是它将在所有用户名之间共享计数器......你将拥有Alejandro,Alejandro1,Pedro,Pedro2,Juan,Juan3。 ....

答案 1 :(得分:0)

我相信你评论过的这个是错的......没有更新。只选择:select * from profile n JOIN(SELECT username,min_id,@ row_number:= @ row_number + 1 as cntr FROM(SELECT username,MIN(profile_id)min_id FROM profile GROUP BY username HAVING COUNT(*)&gt; 1)AS t2,(SELECT @row_number:= 0)AS t)d ON n.username = d.username