【问题标题】:Updating multiple MySQL rows with different criteria使用不同的标准更新多个 MySQL 行
【发布时间】:2018-01-23 22:53:04
【问题描述】:

我有一个这样的 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 不是我表中的主键,即使对于这个查询,我希望它起作用像一个。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以将键和新值插入到临时表中,并在更新查询中加入。像这样

    update your_table 
    join temp_table on your_table.item = temp_table.item
    set your_table.price = temp_table.new_price
    

    【讨论】:

    • 我需要每天都这样做,所以这不是一个理想的解决方案。不过想法很酷。
    • @user3685285,一个临时表有特定的含义,你不认为这个解决方案非常适合日常使用,这表明你可能不熟悉临时表。这正是你做你想做的事的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多