我在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.有没有办法可以在同一个查询中同时更新同时获得相同值的所有行?或者,有没有其他方法可以优化它?
答案 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个值,这似乎最简单。或者您是否需要在一个查询中执行此操作?