mysql - 错误代码 : 1093. 您不能在 FROM 子句中指定目标表 't' 进行更新

标签 mysql sql-update

update test as t 
SET t.agent=86 
where t.id in (select tgt.test_id from test_group_tests as tgt where tgt.test_id in 
(select t.id from test where t.agent in (1)) and tgt.testgroup_id not in (20,58,23,37,447));

我尝试了这个查询,但看到了这个错误。是缺少内部连接还是什么?

最佳答案

一般来说,MySQL 不允许您在同一个查询中SELECT 一个表并UPDATE 同一个表。但是,您可以通过连接表来编写多表 UPDATE

我阅读您的查询的方式,似乎以下内容会做同样的事情:

UPDATE test AS t
JOIN test_group_test AS tgt ON (t.id=tgt.test_id)
JOIN test AS t2 ON (tgt.test_id=t2.id)
SET t.agent=86
WHERE t2.agent IN (1)
  AND tgt.testgroup_id NOT IN (20,58,23,37,447);

虽然我没有测试过这个查询。这是一个使用 JOIN 进行多表 UPDATE 的示例。因此,请您自己仔细测试它,看看它是否按照您的预期运行,并保留原始数据的备份以防万一。

参见 https://dev.mysql.com/doc/refman/5.7/en/update.html有关 MySQL 中多表 UPDATE 的更多信息。

关于mysql - 错误代码 : 1093. 您不能在 FROM 子句中指定目标表 't' 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41885669/

相关文章:

java - 如何在 Java 运行时使用 Spring 执行原生 SQL 查询?

mysql - 单列表的主键数据类型

php - 保存在本地存储中

php - 重构这个mysql表显示代码

mysql - 根据两个表中设置的值使用另一个表中的索引更新 MySQL 表

mysql - 停止 mysql MEDIUMINT 在减法时最大化到 16777214

mysql - 如何使用SQL编辑mysql数据库中某列的多条记录

mysql - RowDataPacket 返回未定义的值

mysql - 根据mysql中另一个表中的值更新一个表中的列

mysql - 您不能在 FROM 子句中指定要更新的目标表 'tblempleave'