Aggiornamento di più righe con valori diversi in una query


12

Sto cercando di capire come AGGIORNARE più righe con valori diversi e non riesco proprio a capirlo. La soluzione è ovunque ma per me sembra difficile da capire.

Ad esempio, due aggiornamenti in 1 query:

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

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

Non capisco cosa funzioni il CASO QUANDO .. POI ... FINE e come utilizzarlo.

Mi chiedo se qualcuno potrebbe aiutarmi in questo.

Risposte:


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

Personalmente, l'uso CASE WHEN THEN ENDsembra goffo.

È possibile codificarlo utilizzando la funzione 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);

Provaci !!!

CAVEAT: CASE WHEN THEN ENDè utile solo quando si hanno a che fare con più valori (più di 2)


Bene, non sapevo di questa funzione IF. Puoi semplicemente spiegare: = IF (id = 1, perché ne hai bisogno?
user3162468

4
posso usare questo per aggiornare circa 100k record in una query sinle?
AMB

4

INSERT ... ON DUPLICATE KEY UPDATE

Dovrai scrivere condizioni molto complicate se desideri aggiornare più di due righe. In tal caso è possibile utilizzare l' INSERT ... ON DUPLICATE KEY UPDATEapproccio.

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
Si noti che ciò aumenta il valore di incremento automatico per la tabella, se si utilizza l'incremento automatico. Per tabelle con throughput elevato che potrebbero essere indesiderabili. Maggiori informazioni stackoverflow.com/a/23517191/2560641
Juliano
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.