使用不同列的可选值更新多行

dim*_*414 2 mysql sql

这基本上是一个查询更新多行的扩展.我希望能够一次更新多行的多列,但不一定要更新每一行的每一列.

这是我希望能够执行的示例命令:

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)意味着必须更新所有选定的列,即使我们根据具体情况指出要放置哪些值.

有没有办法绕过这个限制,比如一个特殊的符号表示"保持原始价值"?如果没有,是否有其他方法可以在一个查询中更新多行的选择,任意列?

Mar*_*ith 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)
Run Code Online (Sandbox Code Playgroud)