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/