Оператор вставки MySQL - при обновлении дубликата ключа - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть оператор вставки MySQL, который вставляет данные из существующей (Despgoods) таблицы в новую таблицу (DespGoods_All Details). Первичным ключом в обеих таблицах является 'case no' и столбец автоинкремента в despgoods_alldetails.

Каждый номер дела имеет номер загрузки, который время от времени меняется. Как я могу настроить свое утверждение так, чтобы при обнаружении дублирующего ключа он просто обновлял номер загрузки этой записи, а не просто отказывал / игнорировал / пропускал вставляемую запись. некоторые записи не будут дублироваться, а некоторые будут. Неповторяющиеся записи все еще должны быть вставлены, в то время как повторяющиеся записи просто должны быть обновлены.

Использую ли я замену или ОБНОВЛЕНИЕ КЛЮЧЕВОГО КЛЮЧА Как мне использовать этот синтаксис в моем существующем запросе?

Заранее спасибо за помощь.

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
 ";

1 Ответ

2 голосов
/ 25 ноября 2011

Вы можете использовать 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. Единственное, что он удалит всю строку, а затем вставит.

...