ホームページ >データベース >mysql チュートリアル >MySQL の SET 句のサブクエリを使用してテーブルを更新するにはどうすればよいですか?

MySQL の SET 句のサブクエリを使用してテーブルを更新するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 02:41:03340ブラウズ

How to Update a Table with a Subquery in the SET Clause in MySQL?

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

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