sqlserver-distinct关键字和分页踩坑记录

在使用PageHelper进行SQL Server分页查询时遇到异常,涉及到ORDER BY子句与DISTINCT关键字的冲突。通过尝试去掉ORDER BY、修改COUNT语句、更换查询字段等方式,最终发现是DISTINCT与PageHelper的分页功能不兼容。解决方法是将查询语句包裹在子查询中,从而避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目分页使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值