Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос на засыпку select top / 24 сообщений из 24, страница 1 из 1
01.09.2003, 11:50
    #32252468
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
ACC 2000, XP
таблица proxies содержит 8000 записей

сохраненный запрос Q1:

Код: plaintext
1.
2.
SELECT top  100  proxies.test_count 
FROM proxies
ORDER BY proxies.test_count;


Вопросы
сколько записей вернет запрос ?
почему?
...
Рейтинг: 0 / 0
01.09.2003, 11:52
    #32252472
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
100 записей.
...
Рейтинг: 0 / 0
01.09.2003, 11:53
    #32252475
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
теоретически или практически?
...
Рейтинг: 0 / 0
01.09.2003, 12:00
    #32252484
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
ежели ты хочешь
получить
именно РАЗЛИЧНЫХ 100 записей
то пиши вот так
SELECT DISTINCT TOP 100 proxies.test_count
FROM proxies
ORDER BY proxies.test_count
имначе она возвращает
ВСЕ встречающиеся 100 значений
...
Рейтинг: 0 / 0
01.09.2003, 12:03
    #32252492
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
с синтаксисом MSJet SQl я знаком.

меня интересует глюк с конструкцией

SELECT top 100 + ORDER BY

только у меня выдает все 8000 записей или ....

ACC 2002 MDB
...
Рейтинг: 0 / 0
01.09.2003, 12:04
    #32252493
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
ты же даешь сортировку
по конкретному полю,
значит ей надо вернуть
100 уникальных значений,
а не 100 записей
убирая сортировку,
аксесс уже не задумывается
о твоей цели и тупо дает 100 записей
...
Рейтинг: 0 / 0
01.09.2003, 12:06
    #32252498
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
Алексей, я, правда,
проверяю на А2002.
так что не обессудь.
...
Рейтинг: 0 / 0
01.09.2003, 12:12
    #32252506
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
какая - то хрень , наверное я чего то напутал сам- в примере упрощено.
немного разберусь - напишу в чем дело
...
Рейтинг: 0 / 0
01.09.2003, 12:32
    #32252541
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
конкретизирую

таблица содержит test_count - 4000 записей - значение 0 остальные 1;
proxies.proxy - уникальное текстовое поле


вот запрос который должен выбрать 100 записей

так работает - 100 записей

Код: plaintext
1.
SELECT DISTINCT TOP  100  proxies.test_count, proxies.proxy
FROM proxies


а так нет - выбирает все записи

Код: plaintext
1.
2.
SELECT DISTINCT TOP  100  proxies.test_count, proxies.proxy
FROM proxies
ORDER BY proxies.test_count;


и так все записи

Код: plaintext
1.
2.
SELECT TOP  100  proxies.test_count, proxies.proxy
FROM proxies
ORDER BY proxies.test_count;
...
Рейтинг: 0 / 0
01.09.2003, 12:38
    #32252551
Kourdikov Sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
Недавно столкнулся с аналогичной проблемой.

AccessXP как-то интересно тянет строки. К примеру, один и тот же запрос с префиксом TOP 30 может вытянуть и 35 и 50 строк. В зависимости от данных.

Но самое печальное даже не это. Вот зачем мы используем оператор TOP ? Что бы быстрее тянуть данные по сетке. А как только в запросе участвует оператор сортировки ORDER, то аксесу становиться глубоко возложить на этот самый ТОР. Он пока все данные по запросу не вытянет, не успокоится.

Получается, что смысла в ТОПЕ нету ?
...
Рейтинг: 0 / 0
01.09.2003, 12:43
    #32252557
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
Алексей, видно ты меня
не слушаешь.
у тебя столбец
содержит 0 и 1. других
значений у тебя нет.
записей у тебя 8000.
если не использовать
сортировку, значит ты
хочешь ЛЮБЫХ 100 записей. она тебе и возвращает.
как только ты ставиьш сортировку,
аксесс думает, что
ты хочешь получить 100 РАЗЛИЧНЫХ
записей, а у тебя только 2 значения - 0 и 1
и ей ничего не остается делать, как вернуть
тебе все 8000 записей
...
Рейтинг: 0 / 0
01.09.2003, 12:46
    #32252560
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
ААААААААААААаа
Идиоты!!! (шутя)
Хелп читайте

Select Top N ...
Выдаст от 0 до плюс бесконечности записей.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT TOP  25 
Имя, Фамилия
FROM Студенты
WHERE ГодВыпуска =  1996 
ORDER BY СреднийБалл DESC;

Если предложение ORDER BY будет опущено, запрос возвратит 
произвольный набор  25  записей из таблицы  "Студенты" , удовлетворяющих 
предложению WHERE.

Предикат TOP не осуществляет выбор между равными значениями.  Если в
предыдущем примере средние балы двадцать пятого и двадцать шестого
студента будут равны, то запрос возвратит  26  записей.


А у тебя там все записи 0 или 1
Разумеется он все вернет
...
Рейтинг: 0 / 0
01.09.2003, 12:48
    #32252563
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
ну как всегда
апаздал
...
Рейтинг: 0 / 0
01.09.2003, 12:48
    #32252565
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
2 Kourdikov Sergey как раз в твоем случае получается ситуация когда несколько записей имеют одно и то же значение и размер выборки увеличивается.

что касается быстрее тянуть данные по сетке то вряд ли это быстрее получится без использования архитектуры клиент- сервер. так как какими не были бы запросы - они все равно выполняются на клиенте...
...
Рейтинг: 0 / 0
01.09.2003, 12:55
    #32252573
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
2 АлексейК
Да и в твоем случае записи имеют одинаковые значения - 0 или 1 (по твоим же словам).
Кажется, ты ни хама, ни меня не слушаешь. Ухожу.
...
Рейтинг: 0 / 0
01.09.2003, 12:57
    #32252581
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
2 Лох Позорный, Хам трамвайный

я очень внимателен !!!!
смотрим еще раз....

так все записи 8000 штук

Код: plaintext
1.
2.
SELECT TOP  100  proxies.test_count, proxies.proxy
FROM proxies
ORDER BY proxies.test_count;


а так только 100

Код: plaintext
1.
2.
SELECT  TOP  100  proxies.test_count, proxies.proxy
FROM proxies
ORDER BY proxies.test_count, proxies.proxy;


разве должно влиять содержание предложения ORDER BY на количество строк выборки???? Это же не where !!!!
...
Рейтинг: 0 / 0
01.09.2003, 13:03
    #32252591
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
И чему ты удивляешься????
proxies.proxy - уникальное текстовое поле
Ты это сам сказал?
Значит и proxies.test_count, proxies.proxy - уникальная комбинация. Только 100 записей и выберет при сортировке по этим полям.
proxies.test_count - неуникальное поле. При сортировке по нему повторяющиеся значения считаются за одно (TOP-ом).

разве должно влиять содержание предложения ORDER BY на количество строк выборки
А почему бы и нет?
...
Рейтинг: 0 / 0
01.09.2003, 13:06
    #32252596
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
В догонку (поглумлюсь над трупом)

В T-SQL можно и так, и так. Т.е. чтобы повторяющиеся значения или считались за одно, или считались за разные.

Код: plaintext
1.
2.
3.
4.
5.
WITH TIES

Specifies that additional rows be returned from the base result set with the same 
value in the ORDER BY columns appearing as the last of the TOP n (PERCENT) 
rows. TOP ...WITH TIES can only be specified if an ORDER BY clause is 
specified.
...
Рейтинг: 0 / 0
01.09.2003, 13:13
    #32252602
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
кажется я только сейчас проникся причиной такого поведения

запрос сначала строит набор записей из предложения ORDER BY
и если поле не включено в сортировку то оно не учавствует в обрезке запроса по TOP....

почему я решил что это глюк - потому что в ADP такой запрос работает по другому
...
Рейтинг: 0 / 0
01.09.2003, 13:19
    #32252615
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
В adp оно по умолчанию работает по другому, но можно заставить работать и точно так же (см. мой предыдущий пост).
...
Рейтинг: 0 / 0
01.09.2003, 13:23
    #32252622
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
я глюки разведу рукааааааааааамиииииии
...
Рейтинг: 0 / 0
01.09.2003, 13:25
    #32252627
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
Хам, ты чего песни то поешь? Вроде еще не пятница?
Ааа, 1-е сентября... В детство ударился
...
Рейтинг: 0 / 0
01.09.2003, 13:32
    #32252642
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
Чтож, Всем спасибо. Вопрос исчерпан.

Выводы:
- при переходе на ADP следует заменять
SELECT TOP 100 на SELECT TOP 100 WITH TIES

- при построении запроса MDB включать в Order By все столбцы определяющие выборку для TOP n.
...
Рейтинг: 0 / 0
01.09.2003, 13:37
    #32252647
Kourdikov Sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку select top
Не форум, а чат какой-то :-)))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос на засыпку select top / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]