Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sql重命名多个原始数据_Mysql_Sql_Duplicates - Fatal编程技术网

Mysql Sql重命名多个原始数据

Mysql Sql重命名多个原始数据,mysql,sql,duplicates,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

我在这里发表了一些解决方案,但没有一个解决了我的问题

我想将我的用户名列设置为现在接收唯一的用户名

但在某些情况下,我需要重命名,因为已经注册了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等等,直到Tony111111。。。最多1000个,使用户名具有较长的长度

我想有一个解决方案,只得到了4个数字后的用户名字。0001000200030004…1000

有人能帮我吗


提前谢谢你

像这样的东西怎么样:

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); 

这是目前我能想到的最好的了。。。。问题是它将在所有用户名之间共享计数器。。。你会有亚历杭德罗、亚历杭德罗、佩德罗、佩德罗、胡安、胡安

我认为您评论的内容是错误的……没有更新。仅选择:从配置文件n中选择*加入选择用户名,min_id,@row_编号:=@row_编号+1作为选择用户名中的cntr,MINprofile_id min_id根据用户名从配置文件组中选择*>1作为t2,选择@row_编号:=0作为n上的t d。用户名=d。用户名

Hi。谢谢,但它给出了一个错误:1064-您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解在第4I行编辑查询时在“:=@row_number+1 AS cntr FROM profile GROUP BY username have COUNT*”附近使用的正确语法。也许如果您添加架构和一些示例数据,我可以使用SQL FIDLE运行查询。我修复了错误,但它给了我以下错误:1248-每个派生表都必须有自己的别名。您是如何修复的?您是否尝试了新的查询?但是,没有架构,我无法测试我的SQL:/错误在这里选择用户名,MINprofile\u id min\u id,@行号:=@行号+1作为cntr。缺少排号旁边的@。怎么能给你寄一件样品?太好了!!我很高兴能帮上忙!,你能把我的帖子标记为回复吗?单击答案左侧的复选框。。请参见此图:完成。再次感谢你