这基本上是一个查询更新多行的扩展?.我希望能够一次更新多行的多列,但不一定要更新每一行的每一列.
这是我希望能够执行的示例命令:
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)
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个错误,告诉我列'name'不能为null.所以在我看来,指定WHERE id IN (x,y,z)意味着必须更新所有选定的列,即使我们根据具体情况指出要放置哪些值.
有没有办法绕过这个限制,比如一个特殊的符号表示"保持原始价值"?如果没有,是否有其他方法可以在一个查询中更新多行的选择,任意列?
我认为您需要将其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)
Run Code Online (Sandbox Code Playgroud)