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

时间:2012-12-18 18:02:21

标签: mysql

我有一个表contacts,其中包含index_idnameaddressphone1phone2phone3

由于多年来管理不善,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);

我尝试将所有重复内容移动到带有

的phone3
update contacts 
set phone3 = phone1
where count(phone3) > 1;

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

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

* move表示数据不再位于phone1,而是位于phone3。与phone1 = NULLphone3 = data

中一样

1 个答案:

答案 0 :(得分: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