MySQL 8.4中SQL_CALC_FOUND_ROWS语法报错原因咨询
报错原因分析:MySQL 8.4中SQL语句语法错误
核心原因是MySQL版本对SQL_CACHE语法的兼容性变化:
- MySQL 8.0版本开始弃用
SQL_CACHE和SQL_NO_CACHE这两个查询缓存相关关键字,从8.0.23版本起完全移除了对它们的支持,MySQL 8.4作为高版本已彻底不识别SQL_CACHE。 - 你的语句在
SELECT后先写了SQL_CACHE,紧接着又写SQL_CALC_FOUND_ROWS,在MySQL 8.4中,无效的SQL_CACHE会被判定为语法错误,进而报错指向后续的SQL_CALC_FOUND_ROWS部分。
修正方案
直接删除语句中的SQL_CACHE关键字即可,同时建议为日期条件加上单引号(避免潜在类型转换问题),修正后的SQL如下:
SELECT SQL_CALC_FOUND_ROWS stat_users_events_daily.user_id, stat_users_events_daily.tracking_category_id as tracking_category_id, IF(ISNULL(tracking_categories.name),"Category not found",tracking_categories.name) as tracking_category_name, SUM(stat_users_events_daily.sent) AS total_sent, SUM(stat_users_events_daily.opened) AS total_opened FROM `stat_users_events_daily` LEFT JOIN `tracking_categories` ON `stat_users_events_daily`.`tracking_category_id` = `tracking_categories`.`id` WHERE `stat_date` between '2024-08-25' and '2024-08-25' GROUP BY `user_id`, `tracking_category_id` ORDER BY `total_opened` desc, `user_id` asc, `tracking_category_id` asc LIMIT 2 OFFSET 0;
内容的提问来源于stack exchange,提问作者Dev Dev
相关产品推荐
相关产品推荐

