站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题请教HSQL统计不重复纪录的问题

请教HSQL统计不重复纪录的问题

摘要: 请教HSQL统计不重复纪录的问题


sql语句为:
select f_id,count(*) from (select distinct f_id, key1,key2 from table1) group by f_id

select f_id,count(distinct key1||key2) from table1 group by f_id

请教如何写成HSQL语句?



hsql中 count(distinct key1||key2) 提示expecting CLOSE, found '||',
嵌套查询更是不行,NND


hql语言并不强大.建议在复杂的sql语句直接用jdbc


我以前的教训
select round(sysdate-tp03.tpc003) from Tp03 as tp03 where tp03.tpa001='1'// 包错
对应的sql是:
select round(sysdate-'1') from dual //通过

死活hql我就写不出来.最后没信心了.用jdbc



这些SQL都无法转化成对应的HQL。
HIBERNATE本来就提供了native SQL的支持,并不要求你一定要用HQL的。


按说这也不是什么复杂的查询,更简单点的
select count(*) from (select distinct key1,key2 from table1)
或写成
select count(distinct key1 || key2) from table1
也算是很常用的统计查询了,这都不支持?
没话说了...


无语


而且,round(sysdate-'1') 还可以有变通的写法,但这个却也实在想不出来还能怎么变通,不行只能 select distinct key1,key2 from table1 后计算结果集的大小了

暂时不考虑掺杂native sql



HQL的一个特点就是要跨数据库。
可是你这些写法都是数据库相关的,因此被HQL枪毙也是有道理的。


听上去似乎有点道理,但
select count(*) from (select distinct key1,key2 from table1)
可是数据库不相关的吧,很多数据库都支持
还有,hql都支持
select count(distinct key1) from table1
select key1 || key2 from table1
那count(distinct key1 || key2) 也应该没理由不支持

被枪毙了也可以,但应该也有替换的写法或其他的什么方式达到相同的目的,也许有,只是我没找到


HQL被设计成面向对象的查询语言,可是咱们用的关系式数据库却不是面向对象的。
有些SQL到HQL的转化的确比较难以实现。

不过作者还是留了一个口子,你可以用Native SQL。没必要在HQL上吊死,就用Native SQL吧,呵呵


结贴了,多谢各位


↑返回目录
前一篇: HttpSessionBindingListener监听器里面的二个方法倒底什么时候触好啊?
后一篇: struts中radio问题 急~