mysql - 更新重复行

标签 mysql sql

我有一张 table :

id    name
1     a
2     a
3     a
4     b
5     b
6     c

我正在寻找将 name 列更新为的更新语句:

id    name
1     a
2     a-2
3     a-3
4     b
5     b-2
6     c

SQL Server 中我会使用:

;with cte as(select *, row_number() over(partition by name order by id) rn from table)
update cte set name = name + '-' + cast(rn as varchar(10))
where rn <> 1

我不擅长 MySQL 非标准查询。 我可以在 MySQL 中做这样的事情吗?

最佳答案

你可以这样做:

UPDATE YourTable p
       JOIN(SELECT t.id,t.name,count(*) as rnk
            FROM YourTable t
            INNER JOIN YourTable s on(t.name = s.name and t.id <= s.id)
            GROUP BY t.id,t.name) f
       ON(p.id = f.id)
SET p.name = concat(p.name,'-',f.rnk)
WHERE rnk > 1

这将基本上使用 join 和 count 来获得与 ROW_NUMBER() 相同的结果,并且只更新那些有超过 1 个结果的人(意味着第二个,第三个 ETC,不包括第一个)

关于mysql - 更新重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35535690/

相关文章:

MySQL服务器消失了

mysql - 监控在 docker 容器中运行的 MySQL?

php - 如何查询,加入表,字段可以使用 Laravel 从字段 A 或 B 获取值

php - 如何正确管理 PHP4 中的触发错误

mysql - 用其他字段的COUNT更新一列是SQL吗?

mysql - 为什么我不能对此形成外键?

php - 数组数据发送并保存到表中,但显示错误消息

mysql - Python占位符

java - SQL 语法异常 - 无效字符,但查询工作正常

mysql - 获取今天添加的结果,不早于