当前使用版本(必填,否则不予处理)
3.4.0
该问题是如何引起的?(确定最新版也有问题再提!!!)
SQL Server2008 分页时排序异常
重现步骤(如果有就写完整)
new QueryWrapper
报错信息
子查询内不允许使用order by语句
建议在查询总条数时去掉ORDER BY 部分。
Comment From: VampireAchao
是否存在IllegalSQLInnerInterceptor,或者尝试select中不进行子查询
Comment From: y88845601
没有使用 IllegalSQLInnerInterceptor,SELECT COUNT(*) FROM (SELECT * FROM [TABLE] WHERE (ID= ?) ORDER BY ID ASC) TOTAL 语句是page方法自动拼装的。
Comment From: qmdx
默认是对 count orderby 优化的, Server2008 无环境无法验证,欢迎解决 pr
Comment From: gobelief
我今天也遇到这个问题, 我将那个分页插件拷贝出来自己修改了一下, 临时解决了我的问题, 我改了两个地方 PaginationInnerInterceptor autoCountSql函数:
if (CollectionUtils.isNotEmpty(orderBy)) {
boolean canClean = true;
if (groupBy != null) {
// 包含groupBy 不去除orderBy
canClean = false;
}
if (canClean) {
for (OrderByElement order : orderBy) {
// order by 里带参数,不去除order by
Expression expression = order.getExpression();
if (!(expression instanceof Column) && expression.toString().contains(StringPool.QUESTION_MARK)) {
canClean = false;
break;
}
}
}
if (canClean) {
plainSelect.setOrderByElements(null);
}
}
改为了
if (CollectionUtils.isNotEmpty(orderBy)) {
boolean canClean = true;
for (OrderByElement order : orderBy) {
// order by 里带参数,不去除order by
Expression expression = order.getExpression();
if (!(expression instanceof Column) && expression.toString().contains(StringPool.QUESTION_MARK)) {
canClean = false;
break;
}
}
if (canClean) {
plainSelect.setOrderByElements(null);
}
}
第二个地方
// 包含 distinct、groupBy不优化
if (distinct != null || null != groupBy) {
return lowLevelCountSql(select.toString());
}
改为了
// 包含 distinct、groupBy不优化
if (distinct != null || null != groupBy) {
return lowLevelCountSql(plainSelect.toString());
}
Comment From: WangslVIP
今天遇到这个问题了,3.5.3版本,还没有修复....