サブクエリを利用した mysql 更新クエリ
SET 句の一部としてサブクエリを使用してテーブルを更新しようとすると、エラーが発生しました。構文が間違っているとフラグが立てられます。この問題は、UPDATE ステートメントの後続の WHERE 句に起因する可能性があります。
Update Competition Set Competition.NumberOfTeams = ( SELECT count(*) as NumberOfTeams FROM PicksPoints where UserCompetitionID is not NULL group by CompetitionID ) a where a.CompetitionID = Competition.CompetitionID
この問題は、外側の update ステートメントの WHERE フィルターが内側のサブクエリの前に実行されるために発生します。したがって、サブクエリの結果を使用して、更新中のテーブルをフィルタリングすることはできません。この問題に対する一般的な解決策は、複数テーブルの更新を使用することです。
Update Competition as C inner join ( select CompetitionId, count(*) as NumberOfTeams from PicksPoints as p where UserCompetitionID is not NULL group by CompetitionID ) as A on C.CompetitionID = A.CompetitionID set C.NumberOfTeams = A.NumberOfTeams
この改訂されたクエリでは、更新されるプライマリ テーブルとして Competition (C というエイリアス) を使用して、複数テーブルの更新が使用されます。 。 Competition と、各 CompetitionId の NumberOfTeams を計算するサブクエリ (A というエイリアス) との間の内部結合を実行します。 WHERE 句を使用して結合結果をフィルタリングし、両方のテーブルで一致する行のみが更新されるようになりました。
[デモ](http://www.sqlfiddle.com/#!2/a74f3/1) ) 更新されたクエリ用。
以上がMySQL の SET 句のサブクエリを使用してテーブルを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。