目前我正忙于实现一个排序过滤器,我需要为每个要过滤的“标记”生成一个 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 答案在我的情况下不起作用,因为我的条件是按特定顺序排列的多个列,它将使 ORs 超出我需要的 AND。然而,它确实帮助我解决了一个早期的问题,所以现在表,临时与否,不再需要。我们只是觉得我们的问题太一般了。整个过滤器的应用现在已经从大约一分钟恢复到四分之一秒以下。