0

( )mysqlを使用してテーブル「upproj」を更新しようとしています。次のクエリを実行したい:Visual Studio 2010c#

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エラーは発生しませんが、私のプロジェクトでは、このクエリをビジュアル スタジオから実行する必要があります。

それを修正する方法はありますか?

4

1 に答える 1

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;

amsこれにより、 の各レコードが の合計で更新されgradeますams。特定amsに 2 つのエントリがない場合、更新されません。

于 2013-09-30T18:30:45.210 に答える