SQL - Возвращает ограниченное количество строк, но полное количество строк

StackOverflow https://stackoverflow.com/questions/2200357

  •  18-09-2019
  •  | 
  •  

Вопрос

Сценарий:Мне нужно извлечь информацию из базы данных Visual FoxPro;однако выполнение больших запросов против этого имеет тенденцию к блокировке системы.Чтобы решить эту проблему, мы установили ограничения, которые отменяли запрос, если он выполнялся по истечении определенного промежутка времени, и ограничивали количество строк, которые он возвращал.

Есть ли способ выполнить запрос с "SELECT TOP ###", но также вернуть фактическое количество строк, найденных с помощью инструкции?Или это единственный способ выполнить запрос дважды?(причина в том, что мы все еще можем выполнить запрос, но проинформировать пользователя о том, что происходит.т. е."Первый ### отображаемый из ### найденных элементов").

Моя первоначальная попытка состояла в том, чтобы просто добавить "COUNT (*)" к части select инструкции, но это не совсем соответствовало тому, что я искал (оно вернуло правильное количество строк, но вернуло только одну строку для остальных данных).

Это было полезно?

Решение

Если я правильно понимаю вопрос, вы могли бы выполнить подвыборку, но это будет означать, что вы вызываете count SQL для каждой возвращаемой строки:

select top 10 field1, field2, (select count(*) from table) as totalrows from table

Это даст вам 10 лучших строк с дополнительным столбцом в каждой под названием totalrows, содержащим количество всех строк в таблице.

Лично, однако, я бы просто запустил отдельный запрос, чтобы получить верхнюю n строки и подсчет.

Другие советы

Вам нужно было бы запустить 2 отдельных выбора.Один для получения количества строк, возвращенных запросом, а затем для возврата подмножества записей для конкретной страницы.

Вы могли бы оптимизировать это, извлекая общее количество только один раз, когда извлекается первая "страница" (т.е.не выполняйте полный подсчет для последующих страниц)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top