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));
我尝试了这个查询,我看到了这个错误。是否缺少内部联接或其他什么?
答案 0 :(得分:2)
通常,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
的示例。因此,请仔细测试,看看它是否符合您的意图,并保留原始数据的备份,以防万一。
有关MySQL中多表UPDATE
的更多信息,请参阅https://dev.mysql.com/doc/refman/5.7/en/update.html。
答案 1 :(得分:0)
在下面的代码中,子查询将返回不在组中的所有测试ID(20,58,23,37,447),但更新将仅更新代理在(1)中的测试记录。
update test as t
SET t.agent=86
where t.agent in (1)
and t.id in
(
select
tgt.test_id
from test_group_tests as tgt
where tgt.testgroup_id not in (20,58,23,37,447)
);