2011-10-04 1 views
1

Je veux créer une requête qui met à jour un int basé sur l'int de la ligne avec un identifiant supérieur de 1.Comment mettre à jour basé sur une rangée anoter dans la même table?

J'ai essayé cette requête, mais elle indique que je ne peux pas étiqueter la table dans une instruction de mise à jour. Mais comment puis-je le référencer dans ma sous-requête?

update t1 a set `int1` = (select `int1` from t1 b where b.id=a.id+1); 

Comment puis-je surmonter le fait que je ne peux pas utiliser un alias?

Répondre

2

Essayez celui -

UPDATE 
    t1 a 
    JOIN t1 b 
    ON b.id = a.id + 1 
SET 
    a.int1 = b.int1; 

S'il y a des trous dans id valeurs, la requête peut être modifiée.

+0

Cela fonctionne, mais comme il l'a dit, la clause ON devrait être: ON b.id = a.id + 1 – Dippi

+0

Oh, oui. J'ai changé la réponse. – Devart

+0

Merci. Par curiosité, pourquoi mon exemple ne fonctionne pas? Quelqu'un peut-il expliquer cela? –

Questions connexes