mysql update将重复项移动到不同的列

Bro*_*dge 2 mysql

我有一个表contacts,其中包含列index_id,name,address,phone1,phone2,phone3.

由于多年来管理不善,484,097中有212,019行phone1并不是唯一的.但是,每条记录都是唯一的记录.

我需要phone1独一无二,但我不想失去212k的记录.

phone3是每个记录为null的新列.我的想法是,我可以简单地移动*VALUES(phone1)phone3

我试过这个查询不明白ON DUPLICATE UPDATE会简单地更新以前存在的记录.

insert into tmp select * from contacts
on duplicate key update phone3 = values(phone1);
Run Code Online (Sandbox Code Playgroud)

我尝试将所有重复项移动到phone3上

update contacts 
set phone3 = phone1
where count(phone3) > 1;
Run Code Online (Sandbox Code Playgroud)

但这是对组功能的无效使用.

我认为这将需要一个子查询,这就是我开始感到困惑的地方.有什么建议吗?

*move意味着数据不再存在,phone1而是存在phone3.就像在phone1 = NULLphone3 = data

fth*_*lla 5

这会将所有重复的phone1移动到列phone3.对于存在重复的每条记录,Phone1将设置为null:

UPDATE
  contacts c1 inner join (select phone1
                          from contacts
                          group by phone1
                          having count(*)>1) c2
  on c1.phone1=c2.phone1
SET
  c1.phone1=null, c1.phone3=c1.phone1
Run Code Online (Sandbox Code Playgroud)