mysql - 单个查询中的多个更新

标签 mysql

在我的数据库中,有几个索引已更新,为了保存一年的数据,我需要重新排列这些索引。

所以,我有一个名为 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

谁能帮我解决这个问题?无法真正理解错误。

最佳答案

为此,您可以使用 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;

关于mysql - 单个查询中的多个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428359/

相关文章:

php - 在 Laravel 中备份 MySQL 表,无需第三方库

mysql - 为什么删除许多 BLOB 会锁定状态为 : enforcing dict cache limit? 的 MySQL 数据库

mysql - 从日期和今天不同的表中选择

mysql - 无法连接到 Windows 上的远程 MySQL 服务器

php - 将自定义查询转换为 SQL

MySQL以不同的方式使用Count

php - 在一个查询与多个查询中获取行及其外键行

php - 更新时的顺序表

php - Laravel 中 MySQL 中的时区

php - HTML 日期时间 到 PHP 到 MySQL