[英]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.