我正在尝试更新表中的多行但由于服务器资源有限,我无法在单独的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语句中有这样的东西,或者我将不得不解决有限的服务器资源?
答案 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');