我想更新一个表并根据不同的where值使用不同的更新值:
[
"2" => "7",
"5" => "23"
]
上述数据应导致所有columnA = 2的行更新columnB = 7,并将columnA = 5的行更新为columnB = 23。
我可以在一个查询中执行此操作还是需要使用单独的更新查询?
最佳答案
适合您的具体情况的最佳解决方案如下(快速且可读):
UPDATE MyTable
SET
columnB =
CASE columnA
WHEN 2 THEN 7
WHEN 5 THEN 23
END
WHERE columnA IN (2, 5)
此外,您可以在没有 WHERE
的情况下进行操作。但对于大表来说,它的效果可能较差,因为 columnB
将在每行中重新分配其当前值,其中 columnA NOT IN (2, 5)
:
UPDATE MyTable
SET
columnB =
CASE columnA
WHEN 2 THEN 7
WHEN 5 THEN 23
ELSE columnB -- reassign the same value instead of using WHERE
END
如果您的条件不是一列等于不同的值,请使用复杂的 CASE
表示法(条件直接位于 WHEN
之后):
UPDATE MyTable
SET
ColumnB =
CASE
WHEN columnA = 2 THEN 7
WHEN columnA = 5 AND 1 = 1 THEN 23 -- FOR EXAMPLE
ELSE ColumnB
END
最后开个小玩笑。 尝试一些数学知识(2 => 7, 5 => 23):
UPDATE MyTable
SET columnA = (11 * columnB * columnB + 83 * columnB) / 30
WHERE columnA IN (2, 5)
关于mysql - sql从关联数组批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42759881/