MySQL UNION ALL拼接语句行数太多出错的解决方案
MySQL UNION ALL拼接语句行数超过5332行,执行就出错!5332行通过,再加一行UNION ALL就是出错。5332行时把某行内容加长很多也不会出错,说明与字符无关。
错误代码: 1436
Thread stack overrun: 246160 bytes used of a 262144 byte stack, and 16000 bytes needed. Use ‘mysqld --thread_stack=#’ to specify a bigger stack.
网上说把my.ini文件的参数改为 thread_stack=256k 重启就好了。事实证明,改了也没用! 改thread_stack=1024k都没用! 又产生了新的错误:
错误代码: 1064
memory exhausted near 'UNION ALL SELECT …
我的拼接语句有3万多行,最终什么参数都不用改,改脚本,简单来说就在外面加一层:
原来出错的脚本:
SELECT ‘aaaaaaaa’ AS 名称
UNION ALL SELECT ‘bbbbbbbb’
UNION ALL SELECT ‘ccccccccc’
UNION ALL SELECT ‘dddddddd’
UNION ALL SELECT ‘eeeeeeee’ /* 后面还有三万行略 */
改装后正确的脚本:
SELECT Q.名称
FROM(
SELECT ‘aaaaaaaa’ AS 名称
UNION ALL SELECT ‘bbbbbbbb’
UNION ALL SELECT ‘ccccccccc’
UNION ALL SELECT ‘dddddddd’
UNION ALL SELECT ‘eeeeeeee’ /* 后面还有三万行略 */
) Q
显示正确结果,原理不详,实在是我试出来的。
总结
MySQL UNION ALL拼接语句行数太多出错的解决方案就是在外面再包一层即可!妙!高!实在是高!