编辑
2023-09-11
遇到的问题
00
请注意,本文编写于 570 天前,最后修改于 570 天前,其中某些信息可能已经过时。

目录

前提
分页相同的原因
分页sql
原因

前提

前台页面上不管分页选第几页,返回的结果都是相同的

分页相同的原因

  • 使用了order by和limit语句,但是没有指定唯一的排序条件。这样可能导致排序结果不稳定,相同的值可能排序出来的结果和读出来的数据顺序不一致。
  • 使用了子查询,但是没有在子查询中指定order by语句。这样可能导致子查询的结果顺序不确定,从而影响分页查询的结果。
  • 使用了rownum作为分页条件,但是没有在外层查询中再次排序。这样可能导致rownum的值不按照预期的顺序分配,从而影响分页查询的结果。

为了避免这些问题,您可以尝试以下方法:

  1. 在order by语句中添加一个唯一的排序条件,比如主键或者时间戳等。这样可以保证排序结果的稳定性和一致性。
  2. 在子查询中也添加order by语句,以确保子查询的结果顺序和外层查询的顺序一致。
  3. 在使用rownum作为分页条件时,在外层查询中再次按照需要的顺序排序,以确保rownum的值正确地分配。

分页sql

sql
SELECT * FROM (SELECT TMP.*, ROWNUM ROW_ID FROM (SELECT m1.CODER, m3.CODER_NAME, m1.MR_HOME_NO, m1.PATIENT_ID, m1.VISIT_ID, m1.VISIT_NO, m1.FULL_NAME, m1.SEX, m1.NAGE, m1.INHOSP_INDEX_NO, m1.DEPT_CODE_OUT, m1.DEPT_NAME_OUT, m1.IN_CHARGE_DOCTOR_ID, m1.DOCTOR_IN_CHARGE, m1.DOCTOR_IN_DIAG, m1.ADMISSION_DATE_TIME, m1.DISCHARGE_DATE_TIME, m1.CHARGE_TYPE_CODE, m1.CHARGE_TYPE, m1.OUT_MAIN_DIAGNOSIS, m2.CATALOG_TIME, m1.SUBMIT_DATE, m2.REWORK_FLAG, m2.HOSPITAL_CODE, m2.RETURN_FLAG, m2.recall_state, m2.keep_state, m1.PATHOLOGICAL_NO, m2.return_catalog_flag, m2.PATHOLOGICAL_FAILURE_FLAG, m1.FORTH_DOCTOR, m1.FORTH_DOCTOR_NAME, m1.MEDICAL_PAY_WAY, m1.DISCHARGE_DISPOSITION_NAME, m1.DISCHARGE_WARD_NAME, case when m1.DISCHARGE_DATE_TIME is not null then to_date(to_char(sysdate, 'yyyy-mm-dd'), 'yyyy-mm-dd') - to_date(to_char(m1.DISCHARGE_DATE_TIME, 'yyyy-mm-dd'), 'yyyy-mm-dd') + 1 - (select count(1) from ARCHIVE_HOLIDAY k where k.data_group = 'holiday' and k.data_value is not null and to_date(k.data_value, 'yyyy-MM-dd') > to_date(to_char(m1.DISCHARGE_DATE_TIME, 'yyyy-mm-dd'), 'yyyy-mm-dd') + 1 and to_date(k.data_value, 'yyyy-MM-dd') < to_date(to_char(sysdate, 'yyyy-mm-dd'), 'yyyy-mm-dd')) else 0 end discharged_days FROM HOME m1, SUBMIT m2, task_alloc m3 WHERE 1 = 1 AND m1.PATIENT_ID = m2.PATIENT_ID(+) AND m1.VISIT_ID = m2.VISIT_ID(+) AND m1.PATIENT_ID = m3.PATIENT_ID(+) AND m1.VISIT_ID = m3.visit_no(+) AND m1.DISCHARGE_DATE_TIME is not null AND (m1.ARCHIVE_INDICATOR = '3' or m1.ARCHIVE_INDICATOR = '1') AND (m2.MR_STATUS in ('0', '4') or m2.mr_status is null) order by m2.CATALOG_TIME desc) TMP WHERE ROWNUM <= 80) WHERE ROW_ID > 60

原因

排查sql发现,在这个sql的条件状态下,catalogTime为空,导致分页异常

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!