baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.34k stars 4.3k forks source link

sqlserver分页查询时,sql使用stuff并使用聚合函数order by 时语句解析会出问题 #551

Closed blazert closed 5 years ago

blazert commented 6 years ago

当前使用版本(必须填写清楚,否则不予处理)

3.0.3

该问题是怎么引起的?(请使用最新版(具体版本查看CHANGELOG.md),如还有该问题再提 issue!)

分页查询

重现步骤

报错信息

输入sql语句如下: SELECT ID, HardWareID, RoomNo, CallTermStatus, winsockIndex, IP, lastuserid, groups=( STUFF(( SELECT ',' + c.GroupName FROM HDCallSpecail b LEFT JOIN GroupSet c ON b.GroupNo= c.GroupNO AND b.CtrllerId= c.CtrllerId WHERE a.CtrllerId= b.CtrllerId AND a.HardWareID= b.HardWareID ORDER BY b.Specail FOR xml path ( '' )), 1, 1, '' )) FROM HardWareSet a WHERE CtrllerId =#{ctrId} 实际执行的语句中这句出现问题: WITH selectTemp AS ( SELECT TOP 100 PERCENT ROW_NUMBER () OVER ( ORDER BY b.Specail FOR xml path ( '' )), 1, 1, '' )) FROM HardWareSet a WHERE CtrllerId =? ) AS __row_number__, ID, HardWareID, RoomNo, CallTermStatus, winsockIndex, IP, lastuserid, groups = ( STUFF(( SELECT ',' + c.GroupName FROM HDCallSpecail b LEFT JOIN GroupSet c ON b.GroupNo= c.GroupNO AND b.CtrllerId= c.CtrllerId WHERE a.CtrllerId= b.CtrllerId AND a.HardWareID= b.HardWareID ORDER BY b.Specail FOR xml path ( '' )), 1, 1, '' )) FROM HardWareSet a WHERE CtrllerId =? ) SELECT

我把order by 去掉 执行通过 貌试解析sql时 处理聚合函数有问题

blazert commented 6 years ago

附上去掉order by语句执行的sql WITH selectTemp AS ( SELECT TOP 100 PERCENT ROW_NUMBER () OVER ( ORDER BY CURRENT_TIMESTAMP ) AS __row_number__, ID, HardWareID, RoomNo, CallTermStatus, winsockIndex, IP, lastuserid, groups = ( STUFF(( SELECT ',' + c.GroupName FROM HDCallSpecail b LEFT JOIN GroupSet c ON b.GroupNo= c.GroupNO AND b.CtrllerId= c.CtrllerId WHERE a.CtrllerId= b.CtrllerId AND a.HardWareID= b.HardWareID FOR xml path ( '' )), 1, 1, '' )) FROM HardWareSet a WHERE CtrllerId =? ) SELECT

miemieYaho commented 5 years ago

解析 sql 用的jsqlparser