1

这里 A 是数据库,B 是 A 的表,C,D,E,F 是表 B 的列。

更新 AB SET C = (SELECT SUM(D) 从 AB t2 WHERE t2.E=ABE AND t2.F=2013 GROUP BY E) WHERE F=2013;

这在 Oracle PL/SQL 中运行良好,但在 MySQL 中出现以下错误:

错误代码:1093。您无法在 FROM 子句 0.000 秒中指定目标表“B”进行更新

我试图解决它:

CREATE TABLE t2 AS select * FROM B;

然后将原来的查询修改为

UPDATE AB SET C = (SELECT sum(D) FROM t2 WHERE t2.E=ABE AND t2.F=2013 GROUP BY E) WHERE F=2013;

现在它需要很长时间才能运行并且 MySQL 经常崩溃。任何指针或帮助表示赞赏。这同样适用于优化查询的任何方法......

4

2 回答 2

1

使用连接:

UPDATE A.B t1
JOIN (SELECT E, SUM(D) sumD
      FROM A.B
      WHERE F = 2013
      GROUP BY E) t2
USING (E)
SET C = sumD
WHERE F = 2013
于 2013-06-07T05:13:59.500 回答
0

UPDATE A.B SET C = (SELECT SUM(D) FROM A.B t2 WHERE t2.E=A.B.E AND t2.F=2013 GROUP BY E) WHERE F=2013;

这是因为您的更新可能是周期性的......如果更新该记录会导致发生导致 WHERE 条件为 FALSE 的事情怎么办?你知道情况并非如此,但引擎不会。在操作中,桌子上也可能有相反的锁。

于 2013-06-07T12:55:38.163 回答