在我的数据库中,有几个索引已更新,为了保存一年的数据,我需要重新排列这些索引。
所以,我有一个名为 FloatTableOld
的表,其中有一个名为 TagIndex
的字段需要更新。
我还有存储在 TagTableOld
中的旧索引,以及存储在 TagTable
中的新索引,它们共享字段 TagName
,我需要将 TagTableOld
.TagIndex
替换为 TagTable
.TagIndex
.
我遇到了一些麻烦,因为我想在单个查询中执行此操作。我得到的是:
UPDATE `FloatTableOld`
SET `FloatTableOld`.`TagIndex` =
(
SELECT `relacao`.`newTag` FROM
(
SELECT `TagTable`.`TagName`,
`TagTableOld`.`TagIndex` AS `oldTag`,
`TagTable`.`TagIndex` AS `newTag`
FROM `TagTable`
INNER JOIN `TagTableOld`
ON `TagTable`.`TagName` = `TagTableOld`.`TagName`
) AS `relacao`
WHERE `FloatTableOld`.`TagName` = `relacao`.`oldTag`
)
WHERE `FloatTableOld`.`TagIndex` =
(
SELECT `FloatTableOld`.`TagIndex`
FROM `FloatTableOld`
)
但是我得到以下错误:
ERROR 1093 (HY000): You can't specify target table 'FloatTableOld' for update in FROM clause
谁能帮我解决这个问题?无法真正理解错误。
最佳答案
为此,您可以使用 update
和 join
。如果我理解正确的话:
update floattableold fto join
tagtableold tto
on fto.tagindex = tto.tagindex join
tagtable tt
on tt.tagname = tto.tagname
set fto.tagindex = tt.tagindex;
关于mysql - 单个查询中的多个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428359/