一直在摸不着头脑,希望你们中的一个善良的人,并指导我解决这个问题。
我有一个客户的mysql表,它包含很多数据,但是出于这个问题的目的,我们只需要担心4列'ID','Firstname','Lastname','Postcode'< / p>
问题是,该表包含许多重复的客户。
正在创建一个新表,其中每个客户都是唯一的,对我们而言,我们根据“名字”,“姓氏”和“邮政编码”确定一个独特的客户
但是,(这是重要的一点)我们需要确保每个新的“唯一”客户记录也可以与原始表中该客户的原始多个条目相匹配。
我认为最好的方法是拥有第三个表,它有'NewUniqueID','OldCustomerID'。因此,我们可以在此表中搜索“NewUniqueID”=“123”,并在适当的时候返回多个“OldCustomerID”值。
我希望使用触发器和重复键语法来完成这项工作。那么会发生什么如下:
运行旧客户表并将其插入新的唯一表中运行查询。 (标准的“插入选择”查询)
在重复键上继续添加记录,但在第三个表中添加一个条目,注意与我们试图插入的记录的'OldCustomerID'一起欺骗的'NewUniqueID'。
希望这是有道理的,如果不清楚,我道歉。 我欢迎并感谢对此的任何想法! 非常感谢 杰森
答案 0 :(得分:1)
因为每个旧客户只有一个新客户(而不是相反),“正确”的设计会在旧表中添加一个新列,比如说new_customer_id
:
alter table old_customer add new_customer_id int;
创建新客户记录后:
insert into new_customer (first_name, last_name, postcode)
select distinct first_name, last_name, postcode
from old_customer;
然后您可以像这样填充新列:
update old_customer oc set
new_customer_id = (
select id
from new_customer
where first_name = oc.first_name
and last_name = oc.last_name
and postcode = oc.postcode);
或者,您可以选择不使用带有垃圾数据的旧记录 - 这些将具有new_customer_id = null;