1

我正在尝试更新表中的多行,但由于服务器资源有限,我无法在单个 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 语句中有这样的东西,还是我必须解决有限的服务器资源?

4

2 回答 2

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)
于 2012-07-18T00:41:21.227 回答
0

你可以使用 MySQL 的"REPLACE"

REPLACE INTO myTable (id,x,y,newValue)
  VALUES (1,1,1,'val1'),
         (1,1,2,'val2'),
         (1,1,3,'val3');
于 2012-07-23T11:47:10.060 回答