2017-09-11 2 views
2

J'essaie d'obtenir un int, ajouter un autre int et écrire les nouvelles données dans une commande sql. Comment puis-je faire ceci? Voici ma solution, mais je ne travaille pas.SQL obtenir, modifier et mettre à jour les données

update accounts set credit = ((select credit from accounts where id = 1679407)+1) where id=1679407; 

L'erreur ressemble à ceci.

Error Code: 1093. Table 'accounts' is specified twice, both as a target for 'UPDATE' and as a separate source for data 0.125 sec 

Répondre

4

Vous semblez vouloir ceci:

update accounts 
    set credit = credit + 1 
    where id = 1679407; 
+0

Merci beaucoup! Je pensais trop compliqué :) – Markus

1

Le problème avec votre approche est que vous mettez à jour la même table à partir de laquelle vous récupérez les données dans un premier temps. Selon la citation donnée dans ce documentation

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

Bien qu'il existe une solution pour que la suite

Update accounts 
     set credit = 
      ((select a.credit from 
         (select *from accounts)as a where id=1679407)+1) 
                    where id=1679407; 

Bien qu'il soit façon assez compliqué à réaliser beaucoup plus simple tâche de la vôtre que vous voulez juste augmenter le crédit de 1 et que seulement pour un particulier id. La manière indiquée ci-dessus peut également causer des problèmes de performance.

La façon la plus simple et la plus efficace de faire votre travail est la façon dont @Gordon Linoff a donné sa réponse.

update accounts 
    set credit = credit + 1 
    where id = 1679407; 

J'espère que vous avez appris quelque chose de cette réponse en plus de trouver la solution à votre problème.