我需要一个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/

10-12 00:37
查看更多