当前使用版本 3.54
当前环境信息 例如: Java8 + sql server 2018
描述bug现象
SELECT COUNT(*) FROM (SELECT model.DM AS id,
FROM V_CUSTOMER model LEFT JOIN v_vipset v(nolock) ON model.dm=v.gkdm LEFT JOIN kehu(nolock) ON model.ckdm=kehu.khdm LEFT JOIN dianyuan AS d(nolock) ON v.JSDY=d.dydm WHERE 1=1 AND (model.DM like '%LD00000081%' OR model.GKMC like '%LD00000081%' OR model.SJ like '%LD00000081%') ORDER BY v.xfje ASC
) TOTAL
分页的时候增加排序字段会出现 除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
SELECT COUNT(*) FROM (SELECT model.DM AS id,
FROM V_CUSTOMER model LEFT JOIN v_vipset v(nolock) ON model.dm=v.gkdm LEFT JOIN kehu(nolock) ON model.ckdm=kehu.khdm LEFT JOIN dianyuan AS d(nolock) ON v.JSDY=d.dydm WHERE 1=1 AND (model.DM like '%LD00000081%' OR model.GKMC like '%LD00000081%' OR model.SJ like '%LD00000081%')
) TOTAL
去掉排序字段就好了
Comment From: cng1985
` public class SqlPaginationInnerInterceptor extends PaginationInnerInterceptor {
public SqlPaginationInnerInterceptor(DbType dbType) {
super(dbType);
}
@Override
protected String lowLevelCountSql(String originalSql) {
int index = originalSql.indexOf("order");
if (index > 0) {
String sql = originalSql.substring(0, index);
return super.lowLevelCountSql(sql);
}
return super.lowLevelCountSql(originalSql);
}
}
`
折中办法
Comment From: nieqiurong
用格式提供完整的sql,
SELECT model.DM AS id,
FROM V_CUSTOMER model
LEFT JOIN v_vipset v(nolock) ON model.dm=v.gkdm
LEFT JOIN kehu(nolock) ON model.ckdm=kehu.khdm
LEFT JOIN dianyuan AS d(nolock) ON v.JSDY=d.dydm
WHERE 1=1
AND (model.DM like '%LD00000081%'
OR model.GKMC like '%LD00000081%'
OR model.SJ like '%LD00000081%')
ORDER BY v.xfje ASC
如果你的原始sql是这样的,那都无法执行,如果你后面还有些字段什么的,请提供解析错误的日志。