ホームページ  >  記事  >  データベース  >  サブクエリを使用してテーブルを更新すると、MySQL が「Table Specified Twice」エラーをスローするのはなぜですか?

サブクエリを使用してテーブルを更新すると、MySQL が「Table Specified Twice」エラーをスローするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-15 02:40:02432ブラウズ

Why Does MySQL Throw

MySQL エラー: UPDATE と Source でテーブルが 2 回指定されています

提供された SQL クエリを使用してマネージャー テーブルを更新しようとすると、MySQL でエラーが発生します。エラー: 「テーブル 'm1' が 2 回指定されています。両方とも 'UPDATE' のターゲットとして、およびデータの別個のソースとして指定されています。」このエラーは、サブクエリ内でテーブル マネージャーが 2 回参照されているために発生します。

この問題は、派生テーブルから選択するようにサブクエリを変更することで解決できます。エイリアス m2 を直接使用する代わりに、クエリでは SELECT ステートメントを使用して一時テーブルを作成し、その一時テーブルから選択する必要があります。以下の変更されたクエリはこれを実現します。

UPDATE manager
SET status = 'Y'
WHERE branch_id IN
(
  SELECT branch_id
  FROM (SELECT * FROM manager) AS m2
  WHERE (branch_id, year) IN
  (
    SELECT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);

派生テーブルを使用することにより、MySQL は UPDATE ステートメントで使用されるマネージャー テーブルとサブクエリで参照されるマネージャー テーブルを適切に区別できます。これにより、エラー メッセージの原因となった混乱が解消されます。

以上がサブクエリを使用してテーブルを更新すると、MySQL が「Table Specified Twice」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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