如果发现重复项,是否使用MYSQL查询更新字段?
这是我的问题。我得到了一张表,意思是 ID - Meaning 1 - red car 2 - cat man 3 - red car 4 - ontime 5 - red car .... 这张桌子相当长,大约有10万行。该查询可能与此查询类似如果发现重复项,是否使用MYSQL查询更新字段?,mysql,sql,Mysql,Sql,这是我的问题。我得到了一张表,意思是 ID - Meaning 1 - red car 2 - cat man 3 - red car 4 - ontime 5 - red car .... 这张桌子相当长,大约有10万行。该查询可能与此查询类似 Update Table Meaning set meaning=concat(meaning,"1") where meaning in (select meaning from Meaning group by meaning having co
Update Table Meaning set meaning=concat(meaning,"1")
where meaning in (select meaning from Meaning group by meaning having count(meaning>1)
那么,解决这个问题的问题是什么呢
似乎我们必须使用设置变量来检查每一行?选择x*
SELECT x.*
, CONCAT(x.meaning,CASE WHEN COUNT(*) = 1 THEN '' ELSE COUNT(*) END) meaning
FROM meanings
x JOIN meanings
y ON y.meaning = x.meaning
AND y.id <= x.id
GROUP
BY id;
,CONCAT(x.means,COUNT(*)=1时的大小写,然后是“”ELSE COUNT(*)END)表示
从意义上
x连接意义
y对y的意义=x的意义
和y.id步骤1:创建临时表
CREATE TABLE TMP (id int, meaning varchar (2));
insert into tmp
SELECT id,
CASE WHEN cnt =0 theN meaning ELSE concat(meaning,'[',cnt+1,']') END AS meaning
FROM
(
SELECT t1.id, t1.meaning, (
SELECT COUNT( t.id )
FROM test t
where t.meaning=t1.meaning
and t.id<t1.id
) as cnt
FROM test t1
)TMP
步骤2:准备查询并插入临时表
CREATE TABLE TMP (id int, meaning varchar (2));
insert into tmp
SELECT id,
CASE WHEN cnt =0 theN meaning ELSE concat(meaning,'[',cnt+1,']') END AS meaning
FROM
(
SELECT t1.id, t1.meaning, (
SELECT COUNT( t.id )
FROM test t
where t.meaning=t1.meaning
and t.id<t1.id
) as cnt
FROM test t1
)TMP
步骤4:迁移到原始
insert into test select * from tmp
为什么不首先让列唯一?我从其他来源获取数据,即problem@cen,这可能是不可能的,除非他先使记录唯一。我会使记录唯一后,有没有重复的Thax为您的答案,但我需要更新。你能提供更新查询吗?