SQL获取,编辑和更新数据

时间:2017-09-11 16:48:03

标签: mysql sql insert sql-update

我试图获取一个int,添加另一个int并在一个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

2 个答案:

答案 0 :(得分:4)

你似乎想要这个:

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

答案 1 :(得分:1)

您的方法的问题在于您首先要更新从中检索数据的同一个表。 根据此documentation

中的引文
  

您无法更新表格并从中选择同一个表格   子查询。

虽然有以下的解决方法

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

虽然实现更简单的任务是非常复杂的方法,因为你只想将信用增加1并且仅用于特定的id。 此外,上述方式有时可能会导致性能问题。

因此,执行任务的最简单,最有效的方式是@Gordon Linoff在答案中给出的方式。

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

希望你从这个答案中学到一些东西,除了找到问题的解决方案。