我想更新表并根据不同的值使用不同的更新值:
[
"2" => "7",
"5" => "23"
]
上面的数据应该导致所有具有columnA = 2的行更新columnB = 7,将rowA = 5的行更新为columnB = 23。
我可以在一个查询中执行此操作,还是需要使用单独的更新查询?
答案 0 :(得分:2)
针对您的具体案例的最佳解决方案是:它快速且可读:
UPDATE MyTable
SET
columnB =
CASE columnA
WHEN 2 THEN 7
WHEN 5 THEN 23
END
WHERE columnA IN (2, 5)
此外,您可以在没有WHERE
的情况下操作。但是对于大表来说它可能效果较差,因为columnB
会在每一行中重新分配{&1;}。 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)