[英]Checking data before importing mysql
我有一个充满“业务”中数据的表,还有一个通过导入引入的名为“表9”的新表。 我正在尝试将表9数据迁移到企业中,但是我需要确保它不存在。 我别无选择,只能现场直播(我有备份)
到目前为止,这是我的代码:
INSERT INTO businesses
(Business, Address1,Address2,Address3,Town,Postcode,BusinessType,Contact,Position,Telephone)
SELECT Company,
line1,
line2,
line3,
town,
postcode,
trade,
(SELECT CONCAT(`ContactSalutation`, ' ', `ContactFirstName`, ' ', `ContactLastName`) FROM telesales.`table 9`),
ContactPosition,
phoneno pnum
FROM telesales.`table 9` ts
where pnum NOT IN (SELECT DISTINCT Telephone
FROM businesses
WHERE Telephone = pnum)
首先,这会做我期望的吗? 仅在表9中的电话号码在业务表中不存在时才插入,是否有办法说出该电话号码是否存在,然后用新数据进行更新?
如果“如果存在”表示它具有相同的主键,那么是的,您应该使用REPLACE
而不是INSERT
。 见http://dev.mysql.com/doc/refman/5.5/en/replace.html
但是,您可能应该首先创建目标表的副本; o)
首先,
(SELECT CONCAT(`ContactSalutation`, ' ', `ContactFirstName`, ' ', `ContactLastName`) FROM telesales.`table 9`),
几乎可以肯定不是您想要的。 您说的是“没有表9的所有信息并将其投入业务”,而没有联接或where子句。 不确定MySQL如何对此做出反应,但是最好的情况是您会得到一个随机行,而不是与您要插入的行关联的行。 我认为您想将其替换为:
CONCAT(`ContactSalutation`, ' ', `ContactFirstName`, ' ', `ContactLastName`),
其次,此查询高度依赖于电话号码的格式。 除非您可以保证格式一致,否则这可能不是一个好主意。
例如,“ 00 31 20 787 9000”与“ 00 31 207 87 9000”是相同的电话号码吗?
在这种情况下,我通常在table9
上创建一个附加列(例如“ businessID”),并编写查询以填充该列。
例如:
update table9 t9
inner join businesses b
on b.phone = t9.phone
set businessID = b.businessID
感查表; 您可能会发现您需要这样做
update table9 t9
inner join businesses b
on b.phone = trim(t9.phone)
set businessID = b.businessID
最后,您可以将table9中的记录插入到具有空businessID的业务中,并更新其他记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.