ホームページ >データベース >mysql チュートリアル >構文エラーを回避するために MySQL Update ステートメントでサブクエリを適切に使用する方法
MySQL でデータを更新する場合、多くの場合、サブクエリを使用して他のテーブルの値を参照する必要があります。ただし、サブクエリが外側の更新ステートメントに適切に関連付けられていない場合、エラーが発生する可能性があります。
次のクエリを考えてみましょう:
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
このクエリはエラー メッセージで失敗します:
#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 ステートメントの where 句に関連していないために発生します。 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 というエイリアス) が適切に結合され、サブクエリの値は、外側の更新ステートメントでのフィルタリングに使用できます。
修正されたクエリのライブ デモンストレーションについては、次の SQL Fiddle を参照してください: http://www.sqlfiddle.com/#!2/a74f3/ 1
以上が構文エラーを回避するために MySQL Update ステートメントでサブクエリを適切に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。