2010-07-26 9 views
11

Ce que je veux faire est:requête mysql mise à jour champ max (champ) + 1

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

La sémantique de cette déclaration, dans mon esprit, serait d'abord la base de données partirait et déterminer pour moi ce que la plus grande valeur de field est dans tous table. Il serait alors ajouter 1 à cette valeur, et attribuer la valeur résultante à la colonne field des lignes avec id 1, 3, 5, 6 et 8. Il semble assez simple ...

Lorsque je tente d'exécuter ce requête si, MySQL s'étrangle et dit:

ERROR 1111 (HY000): Invalid use of group function 

Quelle est la sauce secrète que vous devez utiliser pour obtenir le résultat que je désire?

Cordialement, Vic

Répondre

18

Essayez

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) 

manière flagrante arraché de Here

+0

merci qui a fait l'affaire! – vicatcu

+1

+1: Même si je vous ai battu deux minutes –

+1

Vous ne me battre, mais il vous manque un crochet de fermeture: P – GWW

5

Pour contourner le mysql-error-1093, utilisez un sous-requête/table dérivée/vue en ligne:

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

Vous manque un support après 't.id IN (1,3,5,6,8) **) ** x) ' – Ultrazz008

Questions connexes