- 场景: 测试提了一个缺陷,相同参数请求接口得到的数据的记录排序发生变
- 接受处理:
- 问题分析: 数据排序的处理过程不确定情况,导致发生变化.本地测试,没有复现出来.
- 排查dao层取出数据过程,取出的列表排序发生变化.提取出sql,在本地数据执行,得到的结果是没有变化,问题没有发生变化.
- 中途发现表关联很多
LEFT JOIN exercise_chapter xtchapter ON xtchapter.chapterId = chapter.Id
LEFT JOIN testpaper_detail detail ON xtchapter.exerciseId = detail.exerciseId
LEFT JOIN testpaper_info info ON info.Id = detail.Testpaper_Id
LEFT JOIN homework homework ON homework.testpaperId = info.Id
LEFT JOIN homework_exercise exercise ON exercise.HomeworkId = homework.Id
LEFT JOIN homework_student student ON student.homeworkId = homework.Id
改写这部分表关联的sql.结果没有解决问题
- 找不出问题,有点难受
- 猜测可能是环境问题,然后将sql放到阿里云的rds执行,突然发现就是sql的问题.mysql的版本都是8,那为什么得到的结果不同,那可能是阿里改了底层的东西.但问题还是要解决的,那问题在哪里,让其发生了变化?
SELECT DISTINCT
id as orderId,
no as orderNo,
-- 问题就出在这里,如果出现为null的情况,排序就会发生变化
(SELECT SUM( Score ) / SUM( SumScore ) FROM XXXX WHERE XXXX = 1234) rate
原因找到了,但是原理并不知道
A: 改的方法当然是简单的,将这个抽取出来的,不在sql中操作.
至此问题是解决了,但是原理不是很清楚,先记在这里.后面弄清楚了再补充
网友评论