Aktualisieren mehrerer Zeilen mit unterschiedlichen Werten in einer Abfrage

12

Ich versuche zu verstehen, wie man mehrere Zeilen mit unterschiedlichen Werten aktualisiert, und ich verstehe es einfach nicht. Die Lösung ist überall, aber für mich sieht es schwer zu verstehen aus.

Zum Beispiel zwei Aktualisierungen in einer Abfrage:

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

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

Ich verstehe nicht, was der FALL WANN ... DANN ... ENDE funktioniert und wie man es benutzt.

Ich frage mich, ob mir jemand dabei helfen könnte.

user3162468
quelle

Antworten:

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

Persönlich CASE WHEN THEN ENDsieht die Verwendung ungeschickt aus.

Sie können dies mit der IF-Funktion codieren .

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

Versuche es !!!

CAVEAT: CASE WHEN THEN ENDist nur praktisch, wenn Sie mit mehreren Werten arbeiten (mehr als 2).

RolandoMySQLDBA
quelle
Schön, ich wusste nichts über diese IF-Funktion. Können Sie einfach erklären: = IF (id = 1, Warum brauchen Sie das?
user3162468
4
Kann ich dies zum Aktualisieren von ca. 100.000 Datensätzen in einer einzelnen Abfrage verwenden?
AMB
4

INSERT ... ON DUPLICATE KEY UPDATE

Sie müssen sehr komplizierte Bedingungen schreiben, wenn Sie mehr als zwei Zeilen aktualisieren möchten. In einem solchen Fall können Sie den INSERT ... ON DUPLICATE KEY UPDATEAnsatz verwenden.

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);
Jaroslaw
quelle
3
Beachten Sie, dass dies den Wert für die automatische Inkrementierung für die Tabelle erhöht, wenn Sie die automatische Inkrementierung verwenden. Für Tabellen mit hohem Durchsatz, die möglicherweise unerwünscht sind. Weitere Informationen stackoverflow.com/a/23517191/2560641
Juliano