Да, еще один запрос на обновление ключа дублирования - PullRequest
2 голосов
/ 27 ноября 2011

Я читаю все вопросы здесь, но до сих пор не понимаю

У меня есть две идентичные таблицы значительного размера.Я хотел бы обновить таблицу packages_sorted данными из packages_sorted_temp, не уничтожая существующие данные в packages_sorted

Таблица packages_sorted_temp содержит данные только в 2 столбцах db_id и quality_rank

Таблица packages_sorted содержит данные по всем 35 столбцам, но quality_rank равен 0

Первичный ключ в каждой таблице - db_id, и это то, что я хочу вызвать ON DUPLICATE KEY UPDATE с помощью.

По сути, как мне объединить эти две таблицы и заменить packages_sorted. quality_rank из 0 на quality_rank, хранящийся в packages_sorted_temp под тем же первичным ключом

Вот что нерабочая

INSERT INTO `packages_sorted` ( `db_id` , `quality_rank` )
SELECT `db_id` , `quality_rank`
FROM `packages_sorted_temp` ON DUPLICATE
KEY UPDATE `packages_sorted`.`db_id` = `packages_sorted`.`db_id` 

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011
update packages_sorted , packages_sorted_temp 
set packages_sorted.quality_rank = packages_sorted_temp.quality_rank 
where packages_sorted.db_id = packages_sorted_temp.db_id 
2 голосов
/ 27 ноября 2011

Вы можете использовать Update join следующим образом:

Update packages_sorted p
    inner join packages_sorted_temp temp
    on p.db_id = temp.db_id 
set p.db_id = temp.db_id, p.quality_rank = temp.quality_rank 
...