1

テーブル内の複数の行を更新しようとしていますが、サーバーリソースが制限されているため、個々のUPDATEステートメントで更新できません。これはCASEを使用して単一のステートメントで実行できることは知っていますが、単一の値ではなく複合キー(3列)を使用してテーブルを更新する必要があるため、これを機能させるのに問題があります。

この例は機能します:

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 に答える