当前页面: 开发资料首页 → 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吧,呵呵
结贴了,多谢各位