2011-11-25 63 views
0

我有一個從現有的(Despgoods)表中插入數據的新表(DespGoods_All詳細信息)一個MySQL INSERT語句。兩個表中的主鍵都是'case no',despgoods_alldetails中的自動增量列。MySQL的insert語句 - 在重複鍵更新

每個案例號都有一個隨時發生變化的負荷號。如何調整我的語句,以便在檢測到重複鍵時,它只更新該記錄的負載號,而不僅僅是失敗/忽略/跳過要插入的記錄。有些記錄不會重複,有些會記錄。非重複記錄仍然需要插入,而重複記錄只需要更新。

我是否使用替換到或在重複密鑰更新?如何在現有查詢中使用此語法?

在此先感謝您的幫助。

insert ignore into despgoods_alldetails 
(`loc or exp` ,`LOC TRNSPRT DEST` ,`load number` ,`case no` ,`lot id` ,`metal mass` ,`gross mass` ,`CASE CREATION DATETIME` ,`CASE PROGERESS STATUS` ,`PROGRESS STAT DATETIME` ,`case width` ,`case height` ,`case length` ,`storage` ,`del prty` ,`CRTD DEPT` ,`CASE STATUS` ,`lab released` ,`PROD STREAM` ,`PROD SUB STREAM` ,`CSC Name` ,`Customer` ,`DAYS STANDING` ,`EXP SHIPREL` ,`LOC WHS EREL` ,`LOC CUST REL` ,`REC CHANGED AT` ,`transporttypename` ,`transporttypeid` ,`customerID`,`LOCStatus`) 
SELECT `despgoods`.`loc or exp` ,`despgoods`.`LOC TRNSPRT DEST` ,`despgoods`.`load number` ,`despgoods`.`case no` ,`despgoods`.`lot id` ,`despgoods`.`metal mass` ,`despgoods`.`gross mass` ,`despgoods`.`CASE CREATION DATETIME` ,`despgoods`.`CASE PROGERESS STATUS` ,`despgoods`.`PROGRESS STAT DATETIME` ,`despgoods`.`case width` ,`despgoods`.`case height` ,`despgoods`.`case length` ,`despgoods`.`storage` ,`despgoods`.`del prty` ,`despgoods`.`CRTD DEPT` ,`despgoods`.`CASE STATUS` ,`despgoods`.`lab released` ,`despgoods`.`PROD STREAM` ,`despgoods`.`PROD SUB STREAM` ,`despgoods`.`CSC Name` ,`despgoods`.`Customer` ,`despgoods`.`DAYS STANDING` ,`despgoods`.`EXP SHIPREL` ,`despgoods`.`LOC WHS EREL` ,`despgoods`.`LOC CUST REL` ,`despgoods`.`REC CHANGED AT` ,`customers`.`transporttypename` ,`customers`.`transporttypeid` ,`customers`.`customerID` ,'loadplanned' 
FROM despgoods 
INNER JOIN customers 
ON 
despgoods.customer = customers.customername 
"; 

回答

2

可以使用ON DUPLICATE KEY UPDATE例如:

... 
FROM despgoods 
INNER JOIN customers 
ON 
despgoods.customer = customers.customername 
ON DUPLICATE KEY UPDATE `load number` = VALUES(`load number`); 

你也可以使用REPLACE INTO。唯一的是它會刪除整行然後插入。

+0

謝謝,我繼續使用插入忽略或只是插入?我將用重複密鑰更新進行測試。再次感謝。 – Smudger

+0

Thanks @ Jan,爲了重複的鍵更新,我可以只從我的嵌入式select語句中指定列名稱?我應該更新多個字段我可以使用:ON DUPLICATE KEY UPDATE'load number','gross mass' = VALUES('load number','gross mass');謝謝,瑞安 – Smudger

+0

在重複密鑰更新中使用'load number' = VALUES('load number'),'gross mass' = VALUES('gross mass') –