ホームページ >データベース >mysql チュートリアル >MySQL の自己結合時の「テーブルを再度開くことができません」エラーを解決するにはどうすればよいですか?

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

DDD
DDDオリジナル
2024-11-19 09:36:03411ブラウズ

How to Solve MySQL's

MySQL の「テーブルを再度開くことができません」エラーを克服する

MySQL を使用しているときに、イライラする「テーブルを再度開くことができません」というエラーが発生することがあります。一時テーブルを複数回再利用しようとすると、" エラーが発生します。この制限により、特定のシナリオではスケーラビリティとパフォーマンスが妨げられる可能性があります。

問題を理解するには、次のクエリを検討してください。

SELECT
    *
FROM search
INNER JOIN search f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search fN ON fN.baseID = search.baseID AND fN.condition = conditionN

この例では、「検索」テーブルがそれ自体に複数のクエリに結合されています。特定の行をフィルタリングするために一時テーブルを使用する場合があります。ただし、MySQL は一時テーブルを再度開くことを禁止しています。

簡単な回避策: 一時テーブルの複製

簡単な解決策は、各結合で使用する前に一時テーブルを単純に複製することです。 。これにより、各結合が一時テーブルの独自の一意のインスタンスを持つようになり、「テーブルを再度開くことができません」エラーが排除されます。

このアプローチは、一時テーブルが比較的小さい場合、よくあることですが、うまく機能します。一時テーブル。ただし、大きな一時テーブルの場合、テーブルの複製は現実的ではない可能性があります。

調査と将来のソリューション

元の質問で Kris が述べたように、GROUP_CONCAT 関数を使用します。この特定のシナリオには適していません。ただし、特定のユースケースでは依然として実行可能なソリューションです。

「テーブルを再度開くことができない」制限は、MySQL の既知の問題です。回避策や代替アプローチはありますが、真の解決策は依然として見つかりません。将来の MySQL リリースでは、この制限に対処し、一時テーブルの操作の柔軟性を強化することが有益です。

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

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