2012-07-18 38 views
1

我試圖更新表中的多個行,但由於服務器資源受限,我無法在單獨的UPDATE語句中執行此操作。我知道這可以通過使用CASE在單個語句中完成,但由於表需要使用組合鍵(三列)而不是單個值進行更新,因此我無法使其工作。使用MySQL中的複合鍵更新多行

這個例子的工作原理:

UPDATE myTable 
    SET newValue = CASE id 
     WHEN 1 THEN 'val1' 
     WHEN 2 THEN 'val2' 
     WHEN 3 THEN 'val3' 
    END, 
WHERE id IN (1,2,3) 

但我需要這樣的工作:

UPDATE myTable 
    SET newValue = CASE (id,x,y) 
     WHEN (1,1,1) THEN 'val1' 
     WHEN (1,1,2) THEN 'val2' 
     WHEN (1,1,3) THEN 'val3' 
    END, 
WHERE id IN (1,2,3) 

有沒有辦法有這樣的事情在一個UPDATE語句還是我去必須解決有限的服務器資源?

回答

1

從你的例子稍微重構:

UPDATE myTable 
    SET newValue = CASE 
    WHEN id=1 AND x=1 AND y=1 THEN 'val1' 
    WHEN id=1 AND x=1 AND y=2 THEN 'val2' 
    WHEN id=1 AND x=1 AND y=3 THEN 'val3' 
    END 
WHERE id IN (1,2,3) 
+0

非常感謝霍爾格,我的查詢時間剛剛顯著回落。 – 2012-07-18 00:58:23

0

你可以使用MySQL的"REPLACE"

REPLACE INTO myTable (id,x,y,newValue) 
    VALUES (1,1,1,'val1'), 
     (1,1,2,'val2'), 
     (1,1,3,'val3');