Простой вопрос по SQL
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Ну какой-то порядок же должен быть, по нему и ориентироваться ... Когда я делал свою аппликацию и мне надо было разбить всю БД постанично, замордовался в этом самом выборе ... Вот в Oracl- е все хорошо и тепло, там rowid есть, а у меня Access ... Потом нашел где-то в литературе, что Access и, по-моему но не буду утверждать - не помню, SQL Server поддерживают только SELECT TOP, т.е. выбор определенного количества первых записей, а там уже их надо крутить взад-вперед...
Последний раз редактировалось Seaman 21 фев 2005, 11:10, всего редактировалось 1 раз.
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
в таком-то случае и это работает:Seaman писал(а):Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.Yury писал(а):похоже второе, правда смысла в этом не вижуvg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
но к физическому порядку это отношения не имеетYuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Дык в том-то и вопрос, что нужен физический порядок, а номер id рояли не играет, как у них там в начале 1,2,5,10,11,20. Запись № 5 имеет величену id = 11, запись № 6 имеет величину id = 20, а больше записей нет, т.е. физическим порядком 5- 10 мы получаем только две строчки. (читай страница вторая, что должна содержать записи с 5-й по 10-ю имеет только две записи с id = 11 и с id = 20) Вот и все кино, единственно, как Вы правильно заметили, а что если id стоят в беспорядке, хотя и здесь порядок можно организовать: сначала значки, потом цифирки, потом уж буковки) Все равно SELECT TOP ... ORDER BY сработает (есть у меня и такой живой пример кода)Yury писал(а):в таком-то случае и это работает:Seaman писал(а):Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.Yury писал(а):похоже второе, правда смысла в этом не вижуvg писал(а):Речь идёт, как ни странно, имменно о физическом порядкено к физическому порядку это отношения не имеетYuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
вы не путайте две вещи... физический ордер не имеет смысла. если надо иметь постраничную выборку набора записей по определенному критерию то это совсем другая песня. для постраницчного просмотра данных существует мильен способов.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
3. навороченным запросом (имхо самый убогий способ).
я абсолютно не вижу нафига надо выдать 5 записей с 5ой по 10ую в том порядке как они в базе хранятся.
тут было предложение с двойной сортировкой вперед и наоборот по ИД. но если это скл сервер и кластерный ключ не является именно тот ИД и только он, то тоот запрос не будет работать.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
3. навороченным запросом (имхо самый убогий способ).
я абсолютно не вижу нафига надо выдать 5 записей с 5ой по 10ую в том порядке как они в базе хранятся.
тут было предложение с двойной сортировкой вперед и наоборот по ИД. но если это скл сервер и кластерный ключ не является именно тот ИД и только он, то тоот запрос не будет работать.

- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Re: Простой вопрос по SQL
Еще раз читаем ВНИМАТЕЛЬНО вопрос:
vg писал(а):...
Id - 1,2,5,10,11,20. ... как получить набор записей, включающий записи с 5 по 10.
Т.е. чтобы в наборе мы получили:
id = 11, TxtName = "kjsdfskjf"
id = 20, TxtName = "reworumcnc"
...
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
seaman, ты говоришь не о физическом порядке, а о порядке записей в сортированной выборке, кстати обрати внимание, что в вышеприведенном запросе BEETWEN относится отнюдь не к idSeaman писал(а):Дык в том-то и вопрос, что нужен физический порядок, а номер id рояли не играет, как у них там в начале 1,2,5,10,11,20. Запись № 5 имеет величену id = 11, запись № 6 имеет величину id = 20, а больше записей нет, т.е. физическим порядком 5- 10 мы получаем только две строчки. (читай страница вторая, что должна содержать записи с 5-й по 10-ю имеет только две записи с id = 11 и с id = 20) Вот и все кино, единственно, как Вы правильно заметили, а что если id стоят в беспорядке, хотя и здесь порядок можно организовать: сначала значки, потом цифирки, потом уж буковки) Все равно SELECT TOP ... ORDER BY сработает (есть у меня и такой живой пример кода)Yury писал(а):в таком-то случае и это работает:Seaman писал(а):Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.Yury писал(а):похоже второе, правда смысла в этом не вижуvg писал(а):Речь идёт, как ни странно, имменно о физическом порядкено к физическому порядку это отношения не имеетYuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id

btw, твой запрос возвращает записи с 2 по 6

Последний раз редактировалось Yury 21 фев 2005, 11:59, всего редактировалось 1 раз.
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
согласенпапа Карло писал(а):вы не путайте две вещи... физический ордер не имеет смысла
а в эти таблицы они не запросом попадают?папа Карло писал(а):для постраницчного просмотра данных существует мильен способов.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
Re: Простой вопрос по SQL
а если это учесть:Seaman писал(а):Еще раз читаем ВНИМАТЕЛЬНО вопрос:vg писал(а):...
Id - 1,2,5,10,11,20. ... как получить набор записей, включающий записи с 5 по 10.
Т.е. чтобы в наборе мы получили:
id = 11, TxtName = "kjsdfskjf"
id = 20, TxtName = "reworumcnc"
...
...Т.е. не обязательно последовательность. Про уникальность тоже не знаю...
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Это ужо придирание к словам!
Мы ваших университетов не кончали и таковым терминам не обучены (а то приглашу на клотик чай с кницами пить после тяжелого рабочего дня, да индигет почитать, слабо?
) Извиняюсь если не так чего обозвал там физический порядок - не физический беспорядок. Я считаю, что главное - суть. Суть вопроса vg ясна и решается предложенным образом (проверено на практике) в случае Oracl-а это rowid, а в случае Access-а SELECT TOP ... ORDER BY (R.T.F.M.), что-то еще другое есть у MySQL - не помню, но тоже отличается (кажется кто-то этот пример уже приводил). Другие БД не знаю, скажу честно. 



Последний раз редактировалось Seaman 21 фев 2005, 12:06, всего редактировалось 1 раз.
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
в первую запросом, во вторую просто дописывание происходит при вставке новых записей....Yury писал(а):а в эти таблицы они не запросом попадают?папа Карло писал(а):для постраницчного просмотра данных существует мильен способов.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
table:Seaman писал(а):Вообще-то с 6-й по 10-ю включительноYury писал(а): btw, твой запрос возвращает записи с 2 по 6
id txtName
1 erge
2 er
5 rtyeryt
10 re
11 afvsa
20 asdhnf
your query:
id txtName
2 er
5 rtyeryt
10 re
11 afvsa
20 asdhnf
Последний раз редактировалось Yury 21 фев 2005, 12:38, всего редактировалось 1 раз.