2011-01-05 1 views
1

Ich habe einige suchen, aber konnte nicht eine Antwort dafür gefunden so dachte ich würde hier fragen, wie die Leute hier alles wissen :)Kombinieren von 2 Mysql Update Statements (gleiche Spalte, verschiedene Werte, andere Bedingungen)

Ich versuche, diese 2 Update-Abfragen in einer Abfrage zu kombinieren.

UPDATE addresses SET is_default='0' WHERE id!='1' 
UPDATE addresses SET is_default='1' WHERE id='1' 

Ich nehme an, dies zu hart sein sollte, zu erreichen, aber ich kann es scheinen :(zu arbeiten

Dank

Paul

+0

Darf ich fragen, warum? Versuchen Sie eine Transaktion zu vermeiden, oder ?? –

Antwort

2

Sie CASE dies tun verwenden können:

UPDATE addresses SET is_default = CASE WHEN id = 1 THEN 1 ELSE 0 END; 

In Ihrem Beispiel aktualisieren Sie die gesamte Tabelle, so dass Sie nicht profitieren würden passen Sie aus Indizes, egal was, aber wenn Sie nur eine Teilmenge von Werten tun würden, würden Sie immer noch das Where In verlassen wollen (weil es sehr zweifelhaft ist, dass der Optimierer herausfinden könnte, wie man den Index verwendet). Zum Beispiel:

UPDATE foo 
    SET 
    bar = CASE id WHEN 1 THEN 1 WHEN 2 THEN 0 ELSE bar END 
    baz = CASE WHEN id = 3 THEN 7 ELSE baz END 
    WHERE id IN (1,2,3) 

(Beachten Sie die zwei verschiedenen CASE-Syntaxen).

+0

Danke für die genaue Antwort und Beispiel. CASE ist genau das, wonach ich gesucht habe –

0
UPDATE addresses SET is_default=IF(id='1', '1', '0') 
0

Versuchen Sie folgendes:

UPDATE addresses SET is_default= IF(id!='1', '0', '1') 
Verwandte Themen