MySQL 一時テーブルの「テーブルを再度開くことができません」エラーを回避するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-19 03:05:03
オリジナル
177 人が閲覧しました

How to Workaround the

MySQL の「テーブルを再度開くことができません」エラーへの対処

データ処理では、多くの場合、複雑なクエリでテーブルを複数回利用する機能が不可欠です。ただし、MySQL で一時テーブルを操作する場合、この一見基本的な操作では「テーブルを再度開くことができません」というイライラするエラーが発生します。

バックグラウンド

Kris が説明したように、一時テーブル上で複数の INNER JOINS を含む複雑なクエリを実行すると、エラーが発生します。これは、MySQL では同じクエリ内で一時テーブルを複数回開くことができないために発生します。

回避策

この制限を回避するには、シンプルで効果的な解決策は次のとおりです。一時テーブルを複製し、実質的に 2 つの同一バージョンを作成します。これは、よくあることですが、一時テーブルが比較的小さい場合に特にうまく機能します。

実装

次の手順では、この回避策の実装の概要を説明します。

  1. 一時的なファイルを作成するtable:
CREATE TEMPORARY TABLE search (baseID INT, condition TEXT);
ログイン後にコピー
  1. 一時テーブルにデータを入力します:
INSERT INTO search (baseID, condition) VALUES (1, 'condition1'), (1, 'condition2'), ...;
ログイン後にコピー
  1. 次に、一時テーブルを複製します:
CREATE TEMPORARY TABLE search_copy AS SELECT * FROM search;
ログイン後にコピー
  1. 複製されたテーブルを何度でも使用できるようになりました複雑なクエリで必要です:
SELECT
  *
FROM search
INNER JOIN search_copy f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search_copy f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search_copy fN ON fN.baseID = search.baseID AND fN.condition = conditionN;
ログイン後にコピー

利点

この回避策にはいくつかの利点があります:

  • シンプルさ: ジュニアでも簡単に実装できます
  • 有効性: 「テーブルを再度開くことができません」エラーが解消され、一時テーブルを使用した複雑なクエリが可能になります。
  • スペース効率: 一時テーブルを複製しても、サーバー上の追加のディスク領域は消費されません。

以上がMySQL 一時テーブルの「テーブルを再度開くことができません」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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