1つのクエリで異なる値を持つ複数の行を更新する


12

異なる値を持つ複数の行を更新する方法を理解しようとしていますが、取得できません。解決策はどこにでもありますが、私には理解するのが難しいようです。

たとえば、1つのクエリへの2つの更新:

UPDATE mytable SET fruit='orange', drink='water', food='pizza' WHERE id=1;

UPDATE mytable SET fruit='strawberry', drink='wine', food='fish' WHERE id=2;

CASE WHEN .. THEN ... ENDの動作と使用方法がわかりません。

誰かがこれについて私を助けることができるのだろうか。

回答:


11
UPDATE mytable SET
    fruit = CASE WHEN id=1 THEN 'orange' ELSE 'strawberry' END,
    drink = CASE WHEN id=1 THEN 'water'  ELSE 'wine'       END,
    food  = CASE WHEN id=1 THEN 'pizza'  ELSE 'fish'       END
WHERE id IN (1,2);

個人的には、CASE WHEN THEN END見た目が不格好です。

これは、IF関数を使用してコーディングできます。

UPDATE mytable SET
    fruit = IF(id=1,'orange','strawberry'),
    drink = IF(id=1,'water','wine'),
    food  = IF(id=1,'pizza','fish')
WHERE id IN (1,2);

試してみる !!!

CAVEAT:CASE WHEN THEN END複数の値(2つ以上)を処理する場合にのみ便利です


わかりました。このIF関数については知りませんでした。説明できますか:= IF(id = 1、なぜこれが必要なのですか?
user3162468 '29

4
これを使用して、単一のクエリで約10万件のレコードを更新できますか?
2015年

4

INSERT ... ON DUPLICATE KEY UPDATE

3つ以上の行を更新する場合は、非常に複雑な条件を記述する必要があります。そのような場合は、INSERT ... ON DUPLICATE KEY UPDATEアプローチを使用できます。

INSERT into `mytable` (id, fruit, drink, food)
VALUES
    (1, 'orange', 'water', 'pizza'),
    (2, 'strawberry', 'wine', 'fish'),
    (3, 'peach', 'jiuce', 'cake')
ON DUPLICATE KEY UPDATE
    fruit = VALUES(fruit), 
    drink = VALUES(drink), 
    food = VALUES(food);

3
自動インクリメントを使用している場合、これによりテーブルの自動インクリメント値が増加することに注意してください。望ましくない可能性がある高スループットテーブルの場合。詳細情報stackoverflow.com/a/23517191/2560641
Juliano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.