代码之家  ›  专栏  ›  技术社区  ›  dimo414

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

  •  2
  • dimo414  · 技术社区  · 16 年前

    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 回复  |  直到 9 年前
        1
  •  5
  •   Martin Smith    16 年前

    我想你需要加一个 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
  •  3
  •   Wrikken    16 年前
    ...
    SET name = CASE id
        WHEN 1 THEN 'Jim'
        WHEN 3 THEN 'Precious'
        ELSE name -- defaulting to the value it already has.
    ...