这基本上是Update multiple rows with one query?的扩展。我希望能够一次更新多行的多列,但不一定要更新每一行的每一列。
以下是我希望能够执行的示例命令:
UPDATE person
SET name = CASE id
WHEN 1 THEN 'Jim'
WHEN 3 THEN 'Precious'
END,
sex = CASE id
WHEN 1 THEN 'female'
WHEN 2 THEN 'male'
END
WHERE id IN (1,2,3)
然而,这会返回一个错误,告诉我列'name'不能为null。所以在我看来,指定WHERE id IN (x,y,z)
意味着必须更新所有选定的列,即使我们根据具体情况指出要放置哪些值。
是否有任何方法可以解决此限制,例如表示“保留原始值”的特殊符号?如果没有,是否有其他方法可以在一个查询中更新多行的选择,任意列?
答案 0 :(得分:5)
我认为您需要添加Else
将其更新为原始值。
UPDATE person
SET name = CASE id
WHEN 1 THEN 'Jim'
WHEN 3 THEN 'Precious'
ELSE name
END,
sex = CASE id
WHEN 1 THEN 'female'
WHEN 2 THEN 'male'
ELSE sex
END
WHERE id IN (1,2,3)
答案 1 :(得分:3)
...
SET name = CASE id
WHEN 1 THEN 'Jim'
WHEN 3 THEN 'Precious'
ELSE name -- defaulting to the value it already has.
...