Eri*_*rik 28 mysql select subquery
我有一个问题,让选择子查询工作UPDATE
.我正在尝试以下内容:
UPDATE foo
SET bar=bar-1
WHERE baz=
(
SELECT baz
FROM foo
WHERE fooID='1'
)
Run Code Online (Sandbox Code Playgroud)
foo
具有主键的表名称在哪里fooID
.bar
并且baz
是INT类型.执行此操作时,我收到以下错误:
Error: A query failed. You can't specify target table 'foo' for update
in FROM clause
Run Code Online (Sandbox Code Playgroud)
DwB*_*DwB 54
来自这篇网络文章
出现此错误的原因是,当您在内部选择中使用相同的表作为更新条件时,MySQL不允许更新表.本文继续提供一种解决方案,即使用临时表.
使用此示例,您的更新应为:
update foo
set bar = bar - 1
where baz in
(
select baz from
(
select baz
from foo
where fooID = '1'
) as arbitraryTableName
)
Run Code Online (Sandbox Code Playgroud)
由于错误1093错误1093(ER_UPDATE_TABLE_USED)SQLSTATE = HY000.解决方法是创建一个临时表.
CREATE TEMPORARY table foo_bak (SELECT baz from foo WHERE fooID='1');
UPDATE foo
SET foo.bar=foo.bar-1
WHERE foo.baz =
(
SELECT baz
FROM foo_bak
);
DROP TABLE foo_bak;
Run Code Online (Sandbox Code Playgroud)