Bir sorguda farklı değerlere sahip birden çok satırı güncelleme


12

Farklı değerlere sahip birden çok satırı GÜNCELLEMEYİ anlamaya çalışıyorum ve sadece anlamıyorum. Çözüm her yerde ama benim için anlamak zor görünüyor.

Örneğin, 1 sorguda iki güncelleme:

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

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

VAKA NEDEN OLDUĞUNU ANLAMIYORUM ... SONRA ... END çalıştığını ve nasıl kullanılacağını anlamıyorum.

Birisi bana bu konuda yardımcı olabilir mi acaba?

Yanıtlar:


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

Şahsen, kullanmak CASE WHEN THEN ENDbeceriksiz görünüyor.

EĞER işlevini kullanarak bunu kodlayabilirsiniz .

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

Bir şans ver !!!

CAVEAT: CASE WHEN THEN ENDsadece birden fazla değerle uğraşırken kullanışlıdır (2'den fazla)


Güzel, bu EĞER işlevini bilmiyordum. Açıklayabilir misiniz: = EĞER (id = 1, Neden buna ihtiyacınız var?
user3162468

4
tek sorguda yaklaşık 100 bin kayıt güncellemek için kullanabilir miyim?
AMB

4

INSERT ... ON DUPLICATE KEY UPDATE

İkiden fazla satırı güncellemek istiyorsanız çok karmaşık koşullar yazmanız gerekir. Böyle bir durumda INSERT ... ON DUPLICATE KEY UPDATEyaklaşımı kullanabilirsiniz .

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
Autoincrement kullanıyorsanız, tablonun autoincrement değerini artırdığını unutmayın. İstenmeyen yüksek iş hacmi tabloları için. Daha fazla bilgi stackoverflow.com/a/23517191/2560641
Juliano
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.