通过Microsoft Access查询获取组中的行数

时间:2009-11-09 19:15:04

标签: java sql ms-access jdbc

我在this问题中概述了基本相同的问题,但是我使用Microsoft Access作为数据库而不是MySQL。结果是SQL_CALC_FOUND_ROWS似乎对我不可用。相信我,我想转换,但目前它是不可能的。

我有一个聚合多个行的查询,主要是使用group by来查找基于某些键的重复行。它看起来像这样:

Select key1, key2, key3, Count(id) 
from table 
group by key1, key2, key3 
having Count(id) > 1

我需要确定查询将返回的行数(或分组数)。

数据库是通过Java访问的,所以理论上我可以简单地运行查询,然后循环两次,但我希望能有更快的速度,最好是基于SQL的。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

MS Access记录计数应该能满足您的需求,或者我错过了哪些内容?

如果您需要键中的不同值,请尝试此

SELECT COUNT(*) AS Expr2
  FROM (
        SELECT DISTINCT [key1] & "-" & [key2] & "-" & [key3] AS Expr1
          FROM Table1
       ) AS SUB;

答案 1 :(得分:0)

创建Statement对象时,可以声明它是可滚动的。然后你要做的第一件事就是滚动到最后并获得记录号。当您查看最后一条记录时,这将是结果集中的记录数。然后滚动回到开头并正常处理。类似的东西:

Statement st=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=st.executeQuery(myQueryString);
boolean any=rs.last();
int count = any ? count=getRow()  : 0;
... do whatever with the record count ...
rs.first();
while (rs.next())
{
... whatever processing you want to do ...
}
rs.close();
... etc ...  

我不知道使用MS Access执行此操作的性能影响是什么,是否可以直接跳转到结果集的末尾,或者是否必须按顺序读取所有记录。不过,它应该比执行两次查询更快。