2017-09-11 6 views
2

intを取得し、別のintを追加して、新しいデータを1つのsqlコマンドに書き込もうとしています。これどうやってするの?ここで私のソリューションのアプローチですが、私は動作しません。SQLがデータを取得、編集、更新する

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

エラーは次のようになります。あなたがこれ欲しいように見える

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

答えて

4

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

ありがとうございました! 私はあまりにも複雑だと思った:) – Markus

1

をあなたのアプローチの問題は、あなたが最初にデータを取得しているから、同じテーブルを更新しているということです。あなたがテーブルを更新し、 サブクエリの同じテーブルから選択することはできません。このdocumentation

に与えられた二重引用符を1として 。

それはあなただけの1でクレジットをインクリメントしたいとあなたのはるかに簡単なタスクを達成するための非常に複雑な方法だと、特定のためのことが

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

を次のようにそのための回避策はありますがid。 また、上記の方法でパフォーマンスの問題が発生することがあります。

あなたの仕事を行う最も簡単で効率的な方法は、@ Gordon Linoffが答えてくれた方法です。

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

は、あなたが離れてあなたの問題の解決策を見つけることから、この回答から何かを学んだ願っています。

関連する問題