我需要一个SQL更新,以便:
假设MySQL数据库中有下表
标题
身份证名称
1你好
2你好
3嗨
4个文本
5嗨
6你好
我希望更新此表,以便有唯一的标题。
标题
身份证名称
1你好
2地狱1
3嗨
4个文本
5高1
6地狱2
实际上,我正在处理一个迁移脚本,其中在Unique titles约束中最初没有使用。
最佳答案
update titles t
inner join
(
SELECT id,
title,
case when title=@curTitle then @curRank := @curRank + 1 else @curRank:=0 end,
@curTitle:=title,
@curRank as rank
FROM titles t, (SELECT @curRank := 0,@curTitle="") r
ORDER BY title
) t1 on t1.id = t.id
set t.title = concat(t1.title,case when rank = 0 then "" else rank end)
;
或者,一个可能更有效的方法是接受草莓的答案,并以类似的方式将其转换为更新语句。。。。
因此:
update titles t
inner join
(
SELECT x.id
, concat(x.title,CASE WHEN y.id IS NOT NULL THEN COUNT(y.id) ELSE "" END) newTitle
from titles x
LEFT
JOIN titles y
ON y.title = x.title
AND y.id < x.id
GROUP
BY x.id
) t1 on t1.id = t.id
set t.title = t1.newTitle
;
关于mysql - MySQL更新查询重复条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24361767/