在我的一个数据库中,有几个索引得到了更新,为了保存一年的数据,我需要重新设置这些索引。
所以,我有一个名为FloatTableOld的表,它有一个需要更新的字段,名为TagIndex
我还有存储在TagTableOld中的旧索引和存储在TagTable中的新索引,它们共享字段TagName,我需要用TagTableOldTagIndex替换TagTableTagIndex
我有点麻烦,因为我想在一个查询中完成这个任务。我得到的是:

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

有人能帮我吗?无法真正理解错误。

最佳答案

您可以将updatejoin一起使用。如果我理解正确:

update floattableold fto join
       tagtableold tto
       on fto.tagindex = tto.tagindex join
       tagtable tt
       on tt.tagname = tto.tagname
    set fto.tagindex = tt.tagindex;

10-04 22:41