ホームページ >データベース >mysql チュートリアル >MySQL の自己結合時の「テーブルを再度開くことができません」エラーを解決するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。