如果发现重复项,是否使用MYSQL查询更新字段?

如果发现重复项,是否使用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

这是我的问题。我得到了一张表,意思是

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 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为您的答案,但我需要更新。你能提供更新查询吗?