ホームページ > データベース > mysql チュートリアル > サブクエリの使用時に MySQL で発生する「テーブルが 2 回指定されました」エラーを解決するにはどうすればよいですか?

サブクエリの使用時に MySQL で発生する「テーブルが 2 回指定されました」エラーを解決するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-12 15:02:02
オリジナル
521 人が閲覧しました

How to Resolve the

MySQL エラー: テーブルが 2 回指定されました

テーブルをデータ ソースとしても使用しながら更新しようとすると、MySQL がエラーを発行する場合がありますテーブルが 2 回指定されていることを示します。これは通常、テーブルのエイリアシングを使用したサブクエリを使用するときに発生します。

たとえば、次のクエリを考えてみます。

UPDATE manager AS m1
SET m1.status = 'Y'
WHERE m1.branch_id IN (
  SELECT m2.branch_id
  FROM manager AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT DISTINCT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
ログイン後にコピー

このクエリは、特定のフィールドが有効であるかどうかを確認するサブクエリに基づいてマネージャー テーブルを更新しようとします。 Manager では、タイプが「finance」である Branch_master テーブルの値と一致します。ただし、MySQL は、マネージャー テーブルがターゲット (UPDATE 句内) とデータ ソース (サブクエリ内) の両方として使用されるという事実に異議を唱えています。

この問題を解決し、「テーブルが「2 回指定されました」というエラーが発生した場合は、サブクエリに派生テーブルを使用できます。これには、元のテーブルに基づいて一時テーブルを作成し、その派生テーブルから選択することが含まれます。

FROM (SELECT * FROM manager) AS m2
ログイン後にコピー

元のマネージャー テーブルをかっこで囲み、結果を m2 としてエイリアスすることで、新しい派生テーブルを作成します。これにより、マネージャー名を明示的に 2 回指定しなくても、マネージャー テーブルからデータを選択できるようになります。

更新されたクエリ:

UPDATE manager
SET status = 'Y'
WHERE branch_id IN (
  SELECT branch_id
  FROM (SELECT * FROM manager) AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
ログイン後にコピー

この更新されたクエリは、サブクエリの派生テーブルを正しく使用し、 「テーブルが 2 回指定されています」エラーが発生しても、クエリは正常に実行されます。

以上がサブクエリの使用時に MySQL で発生する「テーブルが 2 回指定されました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート