MySQL更新查询重复条目

时间:2014-06-23 08:46:33

标签: mysql sql sql-update

我想要一个SQL更新,以便:

假设我在MySQL数据库中有以下表格

标题

id title
你好 你好 3你好 4某种文字
5嗨 6你好

我想要更新此表,以便有唯一的标题。

标题

id title
你好 2你好1 3你好 4某种文字
5 hi1
6 hello2

实际上我正在开发一个迁移脚本,其中最初没有使用Unique titles约束。

2 个答案:

答案 0 :(得分:1)

SELECT x.*
     , CASE WHEN y.id IS NOT NULL THEN COUNT(y.id) ELSE '' END rank 
  FROM titles x 
  LEFT 
  JOIN titles y 
    ON y.title = x.title 
   AND y.id < x.id 
 GROUP 
    BY x.id;

答案 1 :(得分:1)

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声明....

因此:

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
;