Обновление нескольких строк MySQL с разными критериями

0

У меня есть таблица 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 не является основным ключом в моей таблице, хотя для этого запроса я хочу, чтобы он действовал как один.

Теги:

1 ответ

1

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

update your_table 
join temp_table on your_table.item = temp_table.item
set your_table.price = temp_table.new_price
  • 0
    Мне нужно делать это ежедневно, так что это не идеальное решение. Классная идея, хотя.
  • 0
    @ user3685285, временная таблица имеет особое значение, и тот факт, что вы не считаете это решение идеально подходящим для ежедневного использования, говорит о том, что вы, возможно, не знакомы с временными таблицами. Это именно то, как вы делаете то, что вы пытаетесь сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню