2011-06-12 3 views
1

J'ai le tableau suivant et j'essaie d'augmenter la valeur de la colonne ref avec la requête suivante.jointure interne avec max ne fonctionne pas

orderid name age address ref 
1  A 22 a1  1 
2  B 21 b1  0 

update table1 
set ref = 
'(SELECT (MAX(ref) + 1) AS max_ref FROM table1)' 
where name= 'B' 

Mais il a toujours mis à 0 à la place si 2.

Merci.

+2

Citez-vous vraiment l'expression? Je ne connais pas MySQL, mais cela semble vraiment étrange (et cela ne devrait pas être fait dans un autre SGBD) – erikkallen

Répondre

0

Essayez:

UPDATE `table1` 
SET `ref` = (
     SELECT `cur_ref` FROM(
       SELECT MAX(`ref`)+1 `cur_ref` FROM `table1` 
     ) `calc_table` 
) WHERE `name` = 'B' 
1

Selon MySQL doc:

Actuellement, vous ne pouvez pas mettre à jour une table et sélectionnez la même table dans une sous-requête .

Cependant, il est facile de contourner:

UPDATE table1 
SET ref = (
    SELECT m.max_ref FROM (
     SELECT (max(ref) + 1) AS max_ref FROM table1) m) 
WHERE name= 'B' 
1

On dirait que vous configurez la colonne entière ref à une chaîne contenant une instruction SQL:

set ref = '(SELECT (MAX(ref) + 1) AS max_ref FROM table1)' 

Lorsque MySQL essaye de convertir cette chaîne à un entier, il se termine par 0.

La bonne façon est d'omettre le '' es, ce qui vous laisse à un nouveau problème: MySQL ne vous permet pas de mettre à jour et de sélectionner dans la même table. Vous trouverez une solution pour cela dans les deux autres réponses.