我有一个像这样的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;
但是说这个表是一百万行,我需要更新50万行。我不想运行50万个更新语句。在给定所有商品/价格对的一个查询中,有没有办法做到这一点?
我已查看了ON DUPLICATE KEY
语法,但鉴于item
不是我表中的主键,我认为这不会起作用,即使对于这个查询,我希望它像一个人一样。
答案 0 :(得分:1)
您可以将密钥和新值插入临时表,并在更新查询中加入。喜欢这个
update your_table
join temp_table on your_table.item = temp_table.item
set your_table.price = temp_table.new_price