Memperbarui beberapa baris dengan nilai berbeda dalam satu kueri

12

Saya mencoba memahami cara MEMPERBARUI beberapa baris dengan nilai yang berbeda dan saya tidak mengerti. Solusinya ada di mana-mana tetapi bagi saya kelihatannya sulit untuk dipahami.

Misalnya, dua pembaruan menjadi 1 permintaan:

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

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

Saya tidak mengerti apa KASUS KETIKA .. KEMUDIAN ... AKHIR berfungsi dan bagaimana menggunakannya.

Bertanya-tanya apakah ada yang bisa membantu saya dalam hal ini.

pengguna3162468
sumber

Jawaban:

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);

Secara pribadi, menggunakan CASE WHEN THEN ENDterlihat canggung.

Anda bisa mengkodekan ini menggunakan fungsi 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);

Cobalah !!!

CAVEAT: CASE WHEN THEN ENDhanya berguna ketika berhadapan dengan banyak nilai (lebih dari 2)

RolandoMySQLDBA
sumber
Bagus, saya tidak tahu tentang fungsi IF ini. Bisakah Anda jelaskan: = JIKA (id = 1, Mengapa Anda membutuhkan ini?
user3162468
4
dapatkah saya menggunakan ini untuk memperbarui sekitar 100 ribu catatan dalam permintaan sinle?
AMB
4

INSERT ... ON DUPLICATE KEY UPDATE

Anda harus menulis kondisi yang sangat rumit jika Anda ingin memperbarui lebih dari dua baris. Dalam kasus seperti itu, Anda dapat menggunakan INSERT ... ON DUPLICATE KEY UPDATEpendekatan.

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);
Yaroslav
sumber
3
Perhatikan bahwa ini meningkatkan nilai peningkatan otomatis untuk tabel, jika Anda menggunakan peningkatan otomatis. Untuk tabel throughput tinggi yang mungkin tidak diinginkan. Info lebih lanjut stackoverflow.com/a/23517191/2560641
Juliano