2017-01-27 60 views
1
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)); 

我試過這個查詢,並且看到這個錯誤。它是否缺少內部連接或某些東西?錯誤代碼:1093.您無法在FROM子句中指定更新目標表't'

回答

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

+0

非常感謝。這工作完美。我有一些重複條目,但不得不將它們添加到NOT IN子句來運行我的查詢。我在「多表格」中使用JOIN學習了新東西, – Raj

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) 
); 
相關問題