我有一张 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/