ホームページ >データベース >mysql チュートリアル >構文エラーを回避するために MySQL Update ステートメントでサブクエリを適切に使用する方法

構文エラーを回避するために MySQL Update ステートメントでサブクエリを適切に使用する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 17:37:30583ブラウズ

How to Properly Use Subqueries in MySQL Update Statements to Avoid Syntax Errors?

更新クエリの SQL サブクエリについて

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。