mysql更新将重复项移动到其他列
我有一个表mysql更新将重复项移动到其他列,mysql,Mysql,我有一个表contacts,其中包含列index\u id,name,address,phone1,phone2,phone3 由于多年来管理不善,484097行中有212019行phone1不是唯一的。但是,每个记录都是唯一的记录 我需要phone1保持唯一性,但我不想丢失212k条记录 phone3是一个新列,每个记录都为空。我的想法是,我可以简单地将*值(phone1)移动到phone3 我尝试了这个查询,但不理解重复更新只会更新以前存在的记录 insert into tmp select
contacts
,其中包含列index\u id
,name
,address
,phone1
,phone2
,phone3
由于多年来管理不善,484097行中有212019行phone1
不是唯一的。但是,每个记录都是唯一的记录
我需要phone1
保持唯一性,但我不想丢失212k条记录
phone3
是一个新列,每个记录都为空。我的想法是,我可以简单地将*值(phone1)
移动到phone3
我尝试了这个查询,但不理解重复更新只会更新以前存在的记录
insert into tmp select * from contacts
on duplicate key update phone3 = values(phone1);
我试着把所有的副本移到phone3上
update contacts
set phone3 = phone1
where count(phone3) > 1;
但这是对组函数的无效使用
我想这需要一个子查询,这就是我开始感到困惑的地方。有什么建议吗
*移动意味着数据将不再位于
phone1
中,而是位于phone3
中。与phone1=NULL
和phone3=data
一样,这将把所有重复的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
c1.phone1=c2.phone1
?另外,这如何处理同一电话号码的不同姓名?(可能也是同一个地址)@ebyrob谢谢,我拼错了phone1,现在没事了!此查询不处理具有相同电话号码的不同姓名,我可以在子查询和on条件上再添加一个coulmn,但我认为这是OP想要的…我需要验证数据,然后才能接受答案,但在我的开发数据库上进行测试后。。。fthiella的查询似乎完成了任务,而且速度也很快。为什么phone1是唯一的?同一个家庭(或小办公室)的人呢?您是否遇到重复条目的问题,或者出于某种原因只想强制phone1为唯一或空?分析:从联系人组中逐个选择电话1、通话组(不同的名称)、通话组(不同的地址),电话1的计数(*)大于1
示例输出是什么?是的,我们所有的联系人都是小型办公室。此表提供了各种营销工具。在phone1中为10人提供相同的电话号码意味着同一办公室可以联系10次。即使该办公室已被要求从联系人名单中删除。因此,我们不想丢失数据,但我们希望phone1是唯一的。我对email1也做了同样的事情。但是那张复制品的清单太小了,我只是用手移动了一下。