ホームページ  >  記事  >  データベース  >  サブクエリを使用した MySQL 更新クエリの「エラー #1064: SQL 構文にエラーがあります」を修正する方法

サブクエリを使用した MySQL 更新クエリの「エラー #1064: SQL 構文にエラーがあります」を修正する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 12:06:29667ブラウズ

How to Fix

サブクエリを使用した 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 サイトの他の関連記事を参照してください。

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