当前位置:编程学习 > JAVA >>

这样的有嵌套查询SQL使用HQL该如何表达

有如下表格,显示了多个人的多科目成绩,要输出每个人最高分的科目
ID    Name     Subject     Score
1     张三      语文          90
2      李四      体育          80
3      老五      政治          70
4      李四      英语          87
5      张三      数学          63
6      老五      化学          96
如果用SQL查询的可写为,

select B.ID, A.name,B.subject,A.score from
 (select name,max(score) as score from tbA group by tbA.name) a,tbA as b 
 where b.name=a.name and b.score=a.score

结果:
1   张三      语文   90
4   李四      英语   87
6   老五      数学   96
那么如何用hql来表达呢,google一下好像hql不支持from的嵌套查询 sql hql 嵌套查询 --------------------编程问答-------------------- 这样不是很好么,为何偏要转hql呢?
即使你转好了hql,hibernate在运行的时候还得再转成sql呢! --------------------编程问答-------------------- 如果想用hibernate执行,并将查询结果对象化,可采用
this.getSession().createSQLQuery("select {toh.*} from table toh where toh.customer_no = 'xxx' ", "toh", TableVo.class).list(); 这样可以将结果转换成自定义的对象。 --------------------编程问答--------------------
引用 1 楼 s478853630 的回复:
这样不是很好么,为何偏要转hql呢?
即使你转好了hql,hibernate在运行的时候还得再转成sql呢!

谢谢1楼,现在在学习hql,由于项目中都采用了hql,所以想保证代码一致性,也想向大家请教下在实际项目中hql是如何处理这种相对复杂的查询的,然道还是用的sql? --------------------编程问答--------------------
引用 2 楼 beichen35 的回复:
如果想用hibernate执行,并将查询结果对象化,可采用
this.getSession().createSQLQuery("select {toh.*} from table toh where toh.customer_no = 'xxx' ", "toh", TableVo.class).list(); 这样可以将结果转换成自定义的对象。

谢谢,但是我的主要疑问是使用hql如何进行类似查询,不知道兄台有没有处理过类似情况。 --------------------编程问答-------------------- 顶起来! --------------------编程问答-------------------- 不想引入原生查询,那就把带子查询的sql转为简单查询的sql吧。 --------------------编程问答-------------------- 那就用代码写呗。分两段 B一段A一段 放到LIST里在取不去一样了 单表HQL应该会 吧 如果全用HQL也可以 但是AB都是一个表 麻烦还没必要。 --------------------编程问答-------------------- 我没怎么用过HQL,不太了解。如果不支持嵌套from,你把嵌套from改成join语句不行吗? --------------------编程问答--------------------
引用 2 楼 beichen35 的回复:
如果想用hibernate执行,并将查询结果对象化,可采用
this.getSession().createSQLQuery("select {toh.*} from table toh where toh.customer_no = 'xxx' ", "toh", TableVo.class).list(); 这样可以将结果转换成自定义的对象。
 楼主 这样可行的 我以前做项目的时候 就是这么用的 --------------------编程问答-------------------- Hibernate 可以说有两套执行sql 语句的方法 一个就是刚刚写的 CreateSQLQuery()
  还是一个就是执行原生态的SQL  CreateQuery(“from table”)  好像是这个方法 --------------------编程问答--------------------
引用 7 楼 ww543829 的回复:
那就用代码写呗。分两段 B一段A一段 放到LIST里在取不去一样了 单表HQL应该会 吧 如果全用HQL也可以 但是AB都是一个表 麻烦还没必要。


建议用代码写,一次不行分两次进行,能不用sql就不要用,太不安全了
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,