美文网首页
阿里rds数据库,同一sql语句执行多次得到数据的排序变化问题

阿里rds数据库,同一sql语句执行多次得到数据的排序变化问题

作者: cmeizu | 来源:发表于2020-12-08 10:49 被阅读0次
    • 场景: 测试提了一个缺陷,相同参数请求接口得到的数据的记录排序发生变
    • 接受处理:
      1. 问题分析: 数据排序的处理过程不确定情况,导致发生变化.本地测试,没有复现出来.
      2. 排查dao层取出数据过程,取出的列表排序发生变化.提取出sql,在本地数据执行,得到的结果是没有变化,问题没有发生变化.
      3. 中途发现表关联很多
    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.结果没有解决问题

    • 找不出问题,有点难受
      1. 猜测可能是环境问题,然后将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中操作.
    至此问题是解决了,但是原理不是很清楚,先记在这里.后面弄清楚了再补充

    相关文章

      网友评论

          本文标题:阿里rds数据库,同一sql语句执行多次得到数据的排序变化问题

          本文链接:https://www.haomeiwen.com/subject/ccjfgktx.html