一尘不染

MYSQL更新,其中WHERE SELECT子查询错误

mysql

我在选择要使用的子查询上遇到问题UPDATE。我正在尝试以下操作:

UPDATE foo
   SET bar=bar-1
 WHERE baz=
      (
       SELECT baz
       FROM foo
       WHERE fooID='1'
      )

foo具有主键的表名在哪里fooIDbar并且baz类型为INT。执行此操作时,出现以下错误:

Error: A query failed. You can't specify target table 'foo' for update 
in FROM clause

阅读 256

收藏
2020-05-17

共1个答案

一尘不染

从这篇网络文章

发生此错误的原因是,当您在内部选择中还使用同一表作为更新条件时,MySQL不允许对表进行更新。本文继续提供一种解决方案,即使用临时表。

使用此示例,您的更新应为:

update foo
set bar = bar - 1
where baz in
(
  select baz from
  (
    select baz
    from foo
    where fooID = '1'
  ) as arbitraryTableName
)
2020-05-17