使用不同的值更新多个行

时间:2010-10-07 14:00:40

标签: mysql sql sql-update

我在MySQL数据库中找到了这个表,'用户'。它有字段'id'和'value'。

现在,我想使用单个 SQL查询更新此表中的许多行,但许多行应该获得不同的值。目前,我正在使用它:

UPDATE users
    SET value = CASE id
        WHEN 1 THEN 53
        WHEN 2 THEN 65
        WHEN 3 THEN 47
        WHEN 4 THEN 53
        WHEN 5 THEN 47
    END
WHERE id IN (1,2,3,4,5)

这很有效。但我觉得我可以做一些优化,因为我只分配了3到4个不同的值。正如您所看到的,现在这些是47,53和65.有没有办法可以在同一个查询中同时更新同时获得相同值的所有行?或者,有没有其他方法可以优化它?

3 个答案:

答案 0 :(得分:12)

而不是case variable when value then ...,尝试case when condition then ... - 就像这样:

UPDATE users
    SET value = CASE 
        WHEN id in (1,4) THEN 53
        WHEN id = 2 THEN 65
        WHEN id in (3,5) THEN 47
    END
WHERE id IN (1,2,3,4,5)

答案 1 :(得分:8)

假设id是唯一的或主要的......

insert into users 
  (id,value) 
VALUES 
  (1,53),(2,65),(3,47),(4,53),(5,47)
on duplicate key update
value=VALUES(value)

答案 2 :(得分:2)

我只想用一些不同的UPDATE语句来做这件事。

UPDATE users
    SET value = 53
WHERE id = 1;


UPDATE users
    SET value = 65
WHERE id = 2;

...

如果您在每行多个行上只设置5个或6个值,这似乎最简单。或者您是否需要在一个查询中执行此操作?