我目前正忙于实现一个过滤器,我需要 for each 要过滤的"标记"生成一个内部连接子句.
问题是,经过一大堆SQL之后,我有一个表,其中包含了我进行 Select 所需的所有信息,但对于生成的每个内部联接,我都需要它
这基本上看起来像:
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
一些研究让我得到了this bug report个,但MySQL的同事们似乎并不关心这样一个基本功能(多次使用表)是否适用于临时表.我在这个问题上遇到了很多可伸缩性问题.
有没有可行的解决方法,不需要我管理大量可能临时但非常真实的表,或者让我维护一个包含所有数据的巨大表?
谢谢你,克里斯
[补充]
在我的情况下,GROUP_CONCAT答案不起作用,因为我的条件是按特定顺序排列的多个列,它将使我需要的内容成为ORs.然而,它确实帮助我解决了之前的一个问题,所以现在不再需要临时表.我们只是觉得我们的问题太笼统了.过滤器的整个应用现在已经从大约一分钟恢复到不到四分之一秒.