项目分页使用PageHelper
//当使用PageHelper去进行SQL含有distinct关键字时并带有order by条件时候
PageHelper.startPage(pageNum, pageSize);
//例如 SQL:
select distinct id,name from table1 order by id
会抛出异常 子查询中不能包含order by 子句
然后我就使用TOP强制使用order by 排序
//这时候改完后的SQL
select distinct TOP 100 PERCENT id,name from table1 order by id
这时候解决了子查询中不能包含order by 子句的问题,开始抛出另外的错误:
select count(0) from (select distinct TOP 100 PERCENT id,name from table1 order by id) tmp
不能转换为SQL分页查询语句
百度了下以为是PageHelper分页的问题,然后重写了此SQL的count语句
select count(distinct id) from table1 order by id
还是抛出异常不能转换为SQL分页查询语句
这个时候我觉得应该不是count的问题,然后我删除了手写的count语句准备开始排查一开始写的SQL,
我删掉了order by排序,还是一样抛出异常,然后我使用*替换查询字段
select * from table1
这已经是最简单的SQL了,如果这个时候还抛出异常的话那肯定就是PageHelper配置的有问题了,果然SQL顺利执行完了
然后我开始加上order by ,还是顺利执行,加上id,name 顺利执行,加上distinct,抛出异常不能转换为SQL分页查询语句,OK找到了问题所在,然后百度了下,distinct果然和PageHelper的分页冲突了,只需要套个子查询就可以解决
//例如 SQL:
select * from (select distinct id,name from table1 order by id) tmp