【问题标题】:Update multiple rows with different, optional values for different colums使用不同列的不同可选值更新多行
【发布时间】:2010-07-15 23:59:35
【问题描述】:

这基本上是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)

但是这会返回一个错误,告诉我列“名称”不能为空。所以在我看来,指定 WHERE id IN (x,y,z) 意味着必须更新所有选定的列,即使我们根据具体情况指明要放置哪些值。

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

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    我认为您需要添加 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)
    

    【讨论】:

      【解决方案2】:
      ...
      SET name = CASE id
          WHEN 1 THEN 'Jim'
          WHEN 3 THEN 'Precious'
          ELSE name -- defaulting to the value it already has.
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-22
        • 2017-05-08
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        • 1970-01-01
        相关资源
        最近更新 更多