2013-09-30 47 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