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