У меня есть таблица MySQL так:
purchases
id | item | price
-----------------
1 | 1 | 12.07
2 | 3 | 14.24
3 | 4 | 13.12
4 | 2 | 11.28
Где id
- первичный ключ, а item
уникален (но не является уникальным ключом). Скажем, мне нужно настроить примерно половину значений:
purchases
id | item | price
-----------------
1 | 1 | 12.07
2 | 3 | 3.24 << changed
3 | 4 | 13.12
4 | 2 | 5.92 << changed
И скажите, что у меня есть все пары товаров/цен, которые необходимо обновить. Я мог бы написать свои обновления так:
UPDATE purchases SET price = 3.24 WHERE item = 3;
UPDATE purchases SET price = 5.92 WHERE item = 2;
Но скажите, что эта таблица составляла миллион строк, и мне нужно было обновить полмиллиона строк. Я не хочу запускать полмиллиона операторов обновления. Есть ли способ сделать это в одном запросе с учетом всех пар предметов/цен?
Я рассмотрел синтаксис ON DUPLICATE KEY
, но я не думаю, что это сработает, если этот item
не является основным ключом в моей таблице, хотя для этого запроса я хочу, чтобы он действовал как один.
Вы можете вставлять ключи и новые значения во временную таблицу, присоединяться к ней в запросе на обновление. Как это
update your_table
join temp_table on your_table.item = temp_table.item
set your_table.price = temp_table.new_price