2012-12-02 13 views
21

Ich möchte mehrere Spalten in meiner Tabelle mit einer case-Anweisung aktualisieren, aber ich kann nicht finden, wie dies zu tun ist (ist das überhaupt möglich). Ich kam mit der folgenden ungültigen Referenz-Abfrage:MySQL CASE zum Aktualisieren mehrerer Spalten

UPDATE tablename SET 
    CASE name 
     WHEN 'name1' THEN col1=5,col2='' 
     WHEN 'name2' THEN col1=3,col2='whatever' 
     ELSE col1=0,col2='' 
    END; 

Gibt es eine Möglichkeit, das erwartete Ergebnis mit gültigen SQL zu erreichen?

+0

Mögliches Duplikat: http://StackOverflow.com/Questions/8358642/case-statement-in-sql-how-to-return-multiple-variables – ean5533

+1

Nicht wirklich, das ist eine Update-Anweisung, keine Auswahl. – Villermen

+0

Duplikat von http://stackoverflow.com/q/3432/1553851 – shmosel

Antwort

29
UPDATE tablename 
SET col1 = CASE WHEN name = 'name1' THEN 5 
       WHEN name = 'name2' THEN 3 
       ELSE 0 
      END 
, col2 = CASE WHEN name = 'name1' THEN '' 
       WHEN name = 'name2' THEN 'whatever' 
       ELSE '' 
      END 
; 
+0

Danke dafür! Ich werde das Format von ean5533 verwenden, da es den CASE-Namen enthält, aber dieser ist besser formatiert, daher habe ich ihn als Anser markiert. – Villermen

+0

Interessant ... Ich wusste nicht, dass das eine gültige Syntax war. Lerne jeden Tag etwas Neues. – bobwienholt

+0

Vielen Dank @bobwienholt für diesen UPDATE CASE Query – Pank

6

Ich weiß keine saubere Art zu tun, was Sie fragen. Ein äquivalentes gültiges SQL-Update wäre:

UPDATE tablename SET 
    col1 = CASE name WHEN 'name1' THEN 5 WHEN 'name2' THEN 3 ELSE 0 END, 
    col2 = CASE name WHEN 'name1' THEN '' WHEN 'name2' THEN 'whatever' ELSE '' END; 

Natürlich ist das nicht schön ist und erfordert die gleichen Fälle (z 'name1') mehrmals zu wiederholen, aber ich glaube einfach nicht, es ist möglich, eine andere Art und Weise.

+0

Dies macht den Trick, und die Wiederholung wird nicht so schwer für PHP zu behandeln =) Danke! – Villermen

0

Wenn name einen eindeutigen Index und Ihre Werte hat, sind bekannt in der Tabelle vorhanden sind, können Sie diesen Trick verwenden:

INSERT INTO tablename (name, col1, col2) 
VALUES ('name1', 5, '') 
    , ('name2', 3, 'whatever') 
ON DUPLICATE KEY UPDATE 
     col1 = VALUES(col1) 
    , col2 = VALUES(col2); 

Wenn es irgendwelche zusätzlichen NOT NULL Spalten ohne einen Standardwert, müssen Sie um Dummy-Werte für diese hinzuzufügen. Lass sie einfach aus dem ON DUPLICATE KEY UPDATE heraus und sie werden ignoriert.