2

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

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

我需要phone1独一无二,但我不想丢失 212k 记录。

phone3是一个对于每条记录都为空的新列。我的想法是我可以简单地搬进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

4

1 回答 1

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
于 2012-12-18T18:07:04.180 回答