2010-07-15 76 views
2

這基本上是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)意味着所有選定的列都必須更新,即使我們正在逐個案例地指出要放置哪些值。

有沒有辦法繞過這個限制,就像是一個特殊的符號來表示「保留原始值」?如果沒有,是否有其他方法可以在一個查詢中更新多行的選擇列,任意列?

回答

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) 
+0

謝謝工作就像一個魅力。 – dimo414 2010-07-16 00:15:44

3
... 
SET name = CASE id 
    WHEN 1 THEN 'Jim' 
    WHEN 3 THEN 'Precious' 
    ELSE name -- defaulting to the value it already has. 
...