克服 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自连接时出现'Can't Reopen Table”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!