簡體   English   中英

導入mysql之前檢查數據

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

更換確實可以,但是..

REPLACE的工作方式與INSERT完全相同,不同之處在於,如果表中的舊行與PRIMARY KEY或UNIQUE索引的新行具有相同的值,則在插入新行之前會刪除該舊行。

但這意味着數據庫將花費大量時間和精力來更新索引。 更好的方法是在重復鍵上使用INSERT IGNORE或INSERT ..

首先,

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM