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

时间:2010-07-15 23:59:36

标签: sql mysql

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

是否有任何方法可以解决此限制,例如表示“保留原始值”的特殊符号?如果没有,是否有其他方法可以在一个查询中更新多行的选择,任意列?

2 个答案:

答案 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.
...