私は現在、フィルタリングするすべての「タグ」に対して INNER JOIN 句を生成する必要がある種類のフィルターを実装するのに忙しいです。
問題は、大量の SQL を実行した後、選択に必要なすべての情報を含むテーブルを作成したことですが、生成された INNER JOIN ごとに再びテーブルが必要になることです。
これは基本的に次のようになります。
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
これは機能しますが、「検索」テーブルを一時的なものにすることをお勧めします(通常のテーブルでない場合は、数桁小さくなる可能性があります)が、非常に厄介なエラーが発生します。Can't reopen table
いくつかの調査により、このバグ レポートにたどり着きましたが、MySQL の人々は、そのような基本的な機能 (テーブルを複数回使用する) が一時テーブルで機能しないことを気にしていないようです。この問題で多くのスケーラビリティの問題に直面しています。
潜在的に多くの一時的であるが非常に現実的なテーブルを管理する必要がない、またはすべてのデータを含む巨大なテーブルを維持する必要がない実行可能な回避策はありますか?
よろしく、 クリス
[追加]
私の条件は特定の順序で複数の列であるため、GROUP_CONCATの回答は私の状況では機能しません。ANDにする必要があるものからORを作成します。ただし、以前の問題を解決するのに役立ったので、一時テーブルであるかどうかにかかわらず、テーブルは不要になりました。私たちは、問題に対して一般的すぎると考えていました。フィルターの適用全体が、約 1 分から 4 分の 1 秒未満に短縮されました。
