Получение количества строк в группе по запросу с помощью Microsoft Access - PullRequest
2 голосов
/ 09 ноября 2009

У меня в принципе та же проблема, изложенная в этом вопросе, однако я использую Microsoft Access в качестве базы данных вместо MySQL. Результатом является то, что SQL_CALC_FOUND_ROWS, кажется, не доступны для меня. Поверьте, я хочу переключиться, но на данный момент об этом не может быть и речи.

У меня есть запрос, который объединяет несколько строк, по сути, ищет повторяющиеся строки на основе определенных ключей, используя группирование по. Это выглядит примерно так:

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

Мне нужно определить количество строк (или группировок), которое будет возвращать запрос.

Доступ к базе данных осуществляется через Java, поэтому теоретически я мог бы просто выполнить запрос и дважды просмотреть его, но я надеялся на что-то более быстрое и предпочтительно на основе SQL. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2009

Количество записей MS Access должно дать вам то, что вам нужно, или я что-то упустил?

Если вам нужны отличные значения от ключей, попробуйте это

SELECT COUNT(*) AS Expr2
  FROM (
        SELECT DISTINCT [key1] & "-" & [key2] & "-" & [key3] AS Expr1
          FROM Table1
       ) AS SUB;
0 голосов
/ 10 ноября 2009

Когда вы создаете объект 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, может ли он перейти непосредственно к концу набора результатов или ему придется последовательно читать все записи. Тем не менее, это должно быть быстрее, чем выполнить запрос дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...