サブクエリを使用した MySQL 更新クエリのトラブルシューティング
サブクエリを使用した MySQL 更新クエリでは、次のようなエラーが発生する場合があります。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a where a.CompetitionID = Competition.CompetitionID' at line 8
クエリ:
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
問題:
外側の where 句が原因でエラーが発生しますupdate ステートメント (a.CompetitionID = Competition.CompetitionID) を内部サブクエリにリンクすることはできません。 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 というエイリアス) を、次のチームの数を計算するサブクエリ (A というエイリアス) と結合します。それぞれの競技。参加条件は CompetitionID にあります。次に、更新ステートメントは、Competition テーブルの NumberOfTeams 列をサブクエリからの計算値に設定します。
デモ:
この更新されたクエリを SQL Fiddle で試すことができます。 : http://www.sqlfiddle.com/#!2/a74f3/1
以上がサブクエリを使用した MySQL 更新クエリの「エラー #1064: SQL 構文にエラーがあります」を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。