2013-09-30 135 views
0

我正在尝试使用Visual Studio 2010c#)更新我的mysql表“upproj”。 我想执行以下查询:Mysql更新查询错误

string Query = " update tlog.upproj set summ=(select sum(grade) from tlog.upproj group by ams having count(*) =2); "; 

,但我得到的错误

"You can't specify target table 'upproj' for update in FROM clause". 

当我执行上Mysql查询浏览器之前的查询我没有得到任何错误,但我的项目需要从Visual Studio执行此查询。

有什么办法解决这个问题吗?

+0

感谢您的编辑:) – GreatGatsby

+0

“UPDATE”查询的目的究竟是什么?如果*有效,它将更新表中的每一行,因为没有设置WHERE子句。 – newfurniturey

+0

并在类似的问题上看到[这个答案](http://stackoverflow.com/a/14302701/1385896)。 –

回答

1

由于错误提示,您不能在UPDATE语句的FROM子句中(在子查询中)指定要更新的表;如果您尝试在WHERE条款中使用它,情况也是如此。

但是,如果您使用JOIN,则可以完成“使用正在更新的表”的任务。

根据您现有查询推断出的架构,ams字段对于集合分组是唯一的,因此可以将其作为子句的一部分进行添加。

试试下面的(未经测试):

UPDATE 
    tlog.upproj AS u1 
    JOIN (SELECT ams, SUM(grade) AS grade_sum FROM tlog.upproj GROUP BY ams HAVING COUNT(*) = 2) AS u2 
     ON u1.ams = u2.ams 
SET 
    summ = u2.grade_sum; 

这应该更新的各个记录amsgrade对于同一ams总和。如果某个特定ams没有2个条目,则不会更新。

+0

非常感谢您的回答!你刚刚救了我:D – GreatGatsby