2010-07-26 4 views
11

Was ich tun möchte, ist:mysql Abfragefeld zu max (Feld) zu aktualisieren + 1

UPDATE table SET field = MAX(field) + 1 WHERE id IN (1, 3, 5, 6, 8); 

Die Semantik dieser Aussage, in meinem Kopf, wäre zuerst die Datenbank gehen würde und bestimmen, für mir was ist der größte Wert von field in allen table. Es würde dann 1 zu diesem Wert hinzufügen und den resultierenden Wert der field Spalte der Zeilen mit id 1, 3, 5, 6 und 8 zuweisen. Scheint einfach genug ...

Wenn ich versuche, das auszuführen obwohl Abfrage, Drosseln MySQL darauf und sagt:

ERROR 1111 (HY000): Invalid use of group function 

Was ist das Geheimnis Sauce Sie verwenden, um das Ergebnis zu bekommen ich wünsche?

Grüße, Vic

Antwort

18

Versuchen

UPDATE TABLE set field = ((SELECT selected_value FROM (SELECT MAX(field) AS selected_value FROM table) AS sub_selected_value) + 1) WHERE id in (1,3,5,6,8) 

In deutlichem von Here abgezockt

+0

danke das hat den Trick gemacht! – vicatcu

+1

+1: Selbst wenn ich dich um zwei Minuten geschlagen habe –

+1

Du hast mich geschlagen, aber du verpasst eine schließende Klammer: P – GWW

5

Um rund um die mysql-error-1093 zu bekommen, eine Unterabfrage/abgeleitete Tabelle/Inline-View verwenden:

UPDATE table 
     SET field = (SELECT x.max_field 
          FROM (SELECT MAX(t.field) + 1 AS max_field 
             FROM TABLE t 
             WHERE t.id IN (1,3,5,6,8)) x) 
+0

Sie verpassen eine Klammer nach 't.id IN (1,3,5,6,8) **) ** x) ' – Ultrazz008

Verwandte Themen