在MySQL中使用复合键更新多行

时间:2012-07-18 00:31:27

标签: mysql sql

我正在尝试更新表中的多行但由于服务器资源有限,我无法在单独的UPDATE语句中执行此操作。我知道这可以通过使用CASE在单个语句中完成,但我无法使其工作,因为表需要使用复合键(三列)而不是单个值进行更新。

此示例有效:

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语句中有这样的东西,或者我将不得不解决有限的服务器资源?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

你可以使用MySQL的"REPLACE"

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