求改hql hql 语句不支持from后面直接跟子查询表

wbsmm 2009-05-11 03:00:42
我想统计该生在该章节的 *做题总数* 中的排行

select count(1) from (select count(*) as con from test_log where chapter_id=12 group by user_id) as a where a.con>= (select count(*) from test_log where user_id=3 and chapter_id=12);
在mysql数据库中能够查询到结果


在hibernate中,return (Integer)this.getHibernateTemplate().find("select count(*) from (select count(1) as con from TestLog where chapterId="+chapterId+" group by userId) as a where a.con>= (select count(*) from TestLog where userId="+userId+" and chapterId="+chapterId+")").get(0);

报出错误信息:
[ERROR]http-8082-4-org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/superteacher1.0].[action]-Servlet.service() for servlet action threw exception
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 22 [select count(*) from (select count(1) as con from hibernate.dao.TestLog where chapterId=2 group by userId) as a where a.con>= (select count(*) from hibernate.dao.TestLog where userId=9 and chapterId=2)]


好像是不识别from后面是个子查询表,哪位高手能把我这个hql语句改改~~~
...全文
576 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbsmm 2009-05-12
  • 打赏
  • 举报
回复
谢谢这位仁兄了!
fredy1111 2009-05-11
  • 打赏
  • 举报
回复
我也没在hql里面写过嵌套查询。其实既然有java了不用再局限在sql语句里啊,用java辅助也可以嘛。
直接传语句select count(*),user_id from test_log where chapter_id=12 group by user_id order by count(*) desc;
然后出来之后就是一个list里面两个元素count(*)和user_id。遍历list当中的user_id,这个user第几个被遍历到,就是第几名了。
wbsmm 2009-05-11
  • 打赏
  • 举报
回复
帮帮忙,想想~~谢谢大家了~~~~
xdop 2009-05-11
  • 打赏
  • 举报
回复
hql不支持from后面直接带子查询,这要从sql本身改造。
想想能否构造一个sql满足需求,又绕过这一限制的语句。
mianfeidog 2009-05-11
  • 打赏
  • 举报
回复
我发现两个查询count(1) , count(*) 顺序不一样。
wbsmm 2009-05-11
  • 打赏
  • 举报
回复
大家帮帮我!感激不尽啊~~~~

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧