我想要一个SQL更新,以便:
假设我在MySQL数据库中有以下表格
标题
id title
你好
你好
3你好
4某种文字
5嗨
6你好
我想要更新此表,以便有唯一的标题。
标题
id title
你好
2你好1
3你好
4某种文字
5 hi1
6 hello2
实际上我正在开发一个迁移脚本,其中最初没有使用Unique titles约束。
答案 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
;