【问题标题】:Update with SubQuery from same table使用同一张表中的子查询进行更新
【发布时间】:2017-08-28 23:37:57
【问题描述】:

是否可以使用来自同一个表的子查询进行更新?

我收到此错误:

1093 - 您不能在 FROM 子句中指定目标表 'tasks' 进行更新

update tasks SET completed_form = 'y' AND all_forms_in = 'y' where EID in (select EID from tasks WHERE completed_form = 'y' AND all_forms_in = 'n' group by EID having count(*) > 1);

更新

我发现如果我将查询包装在另一个选择中,它会起作用。此处引用:MySQL Error 1093 - Can't specify target table for update in FROM clause

update tasks SET all_forms_in = 'y' where EID in (SELECT * FROM (select EID from tasks WHERE completed_form = 'y' AND all_forms_in = 'n' group by EID having count(*) > 1)AS b);

【问题讨论】:

    标签: mysql sql-update subquery


    【解决方案1】:

    MySQL 支持 UPDATE 语句中的 JOIN,因此您可以在没有子查询的情况下执行此操作。您必须使用已完成的条件连接到两个不同的行来模拟 count(*) > 1。

    UPDATE tasks AS t1
    INNER JOIN tasks AS t2
      ON (t1.EID = t2.EID AND t2.completed_form = 'y' AND t2.all_forms_in = 'n')
    INNER JOIN tasks AS t3
      ON (t1.EID = t3.EID AND t3.completed_form = 'y' AND t3.all_forms_in = 'n'
      AND t2.primary_key <> t3.primary_key)
    SET t1.completed_form = 'y', 
        t1.all_forms_in = 'y';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多