MySQL8执行查询报Unknown column in 'field list'错误但列实际存在求助
问题排查与修复方案
核心报错原因
- MySQL 8 原生不支持
FULL JOIN语法,这是触发「Unknown column in 'field list'」错误的直接原因:MySQL无法正确解析非法的关联语法,也就无法识别关联表New_application_request_2020的字段,会误判字段不存在。如果需要实现全外连接效果,需要用LEFT JOIN UNION RIGHT JOIN的组合写法替代。 - 默认SQL模式校验不通过:MySQL默认开启
ONLY_FULL_GROUP_BY规则,要求SELECT子句中所有非聚合字段必须全部出现在GROUP BY列表中,你当前仅按week_commencing_date_2021分组,其余非聚合字段未声明到分组规则中,修复第一个问题后也会触发对应报错。 - 百分比计算逻辑错误:原始写法的运算优先级不符合同比差值计算规则,实际运行逻辑为
2021年申请量 - (2020年申请量/(2020年申请量*100)),计算结果完全不符合预期。正确的同比百分比差值公式为((2021年申请量 - 2020年申请量) / 2020年申请量) * 100,建议新增除数为0的容错判断避免运算异常。
修复后的SQL示例
版本1:仅查询两年均有数据的周(用内连接,性能更高)
SELECT t21.week_id AS week_id, t20.week_commencing_date AS week_commencing_date_2020, t21.week_commencing_date AS week_commencing_date_2021, -- ROUND保留2位小数,NULLIF避免2020年申请量为0时的除0错误 ROUND( (t21.application_request - t20.application_request) / NULLIF(t20.application_request, 0) * 100, 2 ) AS percentage_difference FROM New_application_request_2021 t21 INNER JOIN New_application_request_2020 t20 ON t21.week_id = t20.week_id GROUP BY week_id, week_commencing_date_2020, week_commencing_date_2021;
版本2:需要保留仅2020年有数据、仅2021年有数据的周(全外连接实现)
SELECT * FROM ( -- 左连接取2021年所有周 SELECT t21.week_id AS week_id, t20.week_commencing_date AS week_commencing_date_2020, t21.week_commencing_date AS week_commencing_date_2021, ROUND( (t21.application_request - t20.application_request) / NULLIF(t20.application_request, 0) * 100, 2 ) AS percentage_difference FROM New_application_request_2021 t21 LEFT JOIN New_application_request_2020 t20 ON t21.week_id = t20.week_id UNION -- 右连接取2020年所有周,UNION自动去重 SELECT t20.week_id AS week_id, t20.week_commencing_date AS week_commencing_date_2020, t21.week_commencing_date AS week_commencing_date_2021, ROUND( (t21.application_request - t20.application_request) / NULLIF(t20.application_request, 0) * 100, 2 ) AS percentage_difference FROM New_application_request_2021 t21 RIGHT JOIN New_application_request_2020 t20 ON t21.week_id = t20.week_id ) t GROUP BY week_id, week_commencing_date_2020, week_commencing_date_2021;
内容的提问来源于stack exchange,提问作者Sandra
相关产品推荐
相关产品推荐

