Простой вопрос по SQL

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
Seaman
Пользователь
Сообщения: 197
Зарегистрирован: 21 фев 2003, 13:26
Откуда: Ессентуки-Нврск-СПб-Торонто

Сообщение Seaman »

Ну какой-то порядок же должен быть, по нему и ориентироваться ... Когда я делал свою аппликацию и мне надо было разбить всю БД постанично, замордовался в этом самом выборе ... Вот в Oracl- е все хорошо и тепло, там rowid есть, а у меня Access ... Потом нашел где-то в литературе, что Access и, по-моему но не буду утверждать - не помню, SQL Server поддерживают только SELECT TOP, т.е. выбор определенного количества первых записей, а там уже их надо крутить взад-вперед...
Последний раз редактировалось Seaman 21 фев 2005, 11:10, всего редактировалось 1 раз.
Аватара пользователя
Yury
The L'ony
Сообщения: 26202
Зарегистрирован: 22 янв 2004, 13:48
Откуда: Мирный -> Vancouver
Контактная информация:

Сообщение Yury »

vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Аватара пользователя
Seaman
Пользователь
Сообщения: 197
Зарегистрирован: 21 фев 2003, 13:26
Откуда: Ессентуки-Нврск-СПб-Торонто

Сообщение Seaman »

Yury писал(а):
vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
Аватара пользователя
Yury
The L'ony
Сообщения: 26202
Зарегистрирован: 22 янв 2004, 13:48
Откуда: Мирный -> Vancouver
Контактная информация:

Сообщение Yury »

Seaman писал(а):
Yury писал(а):
vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
в таком-то случае и это работает:
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
Откуда: Ессентуки-Нврск-СПб-Торонто

Сообщение Seaman »

Yury писал(а):
Seaman писал(а):
Yury писал(а):
vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
в таком-то случае и это работает:
Yuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
но к физическому порядку это отношения не имеет
Дык в том-то и вопрос, что нужен физический порядок, а номер 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 сработает (есть у меня и такой живой пример кода)
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

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

1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
3. навороченным запросом (имхо самый убогий способ).

я абсолютно не вижу нафига надо выдать 5 записей с 5ой по 10ую в том порядке как они в базе хранятся.

тут было предложение с двойной сортировкой вперед и наоборот по ИД. но если это скл сервер и кластерный ключ не является именно тот ИД и только он, то тоот запрос не будет работать. ;)
Аватара пользователя
Seaman
Пользователь
Сообщения: 197
Зарегистрирован: 21 фев 2003, 13:26
Откуда: Ессентуки-Нврск-СПб-Торонто

Re: Простой вопрос по SQL

Сообщение Seaman »

Еще раз читаем ВНИМАТЕЛЬНО вопрос:
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
Контактная информация:

Сообщение Yury »

Seaman писал(а):
Yury писал(а):
Seaman писал(а):
Yury писал(а):
vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
в таком-то случае и это работает:
Yuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
но к физическому порядку это отношения не имеет
Дык в том-то и вопрос, что нужен физический порядок, а номер 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 сработает (есть у меня и такой живой пример кода)
seaman, ты говоришь не о физическом порядке, а о порядке записей в сортированной выборке, кстати обрати внимание, что в вышеприведенном запросе BEETWEN относится отнюдь не к id ;)

btw, твой запрос возвращает записи с 2 по 6 :wink:
Последний раз редактировалось Yury 21 фев 2005, 11:59, всего редактировалось 1 раз.
Аватара пользователя
Yury
The L'ony
Сообщения: 26202
Зарегистрирован: 22 янв 2004, 13:48
Откуда: Мирный -> Vancouver
Контактная информация:

Сообщение Yury »

папа Карло писал(а):вы не путайте две вещи... физический ордер не имеет смысла
согласен
папа Карло писал(а):для постраницчного просмотра данных существует мильен способов.

1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
а в эти таблицы они не запросом попадают?
Аватара пользователя
Yury
The L'ony
Сообщения: 26202
Зарегистрирован: 22 янв 2004, 13:48
Откуда: Мирный -> Vancouver
Контактная информация:

Re: Простой вопрос по SQL

Сообщение Yury »

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
Откуда: Ессентуки-Нврск-СПб-Торонто

Сообщение Seaman »

Это ужо придирание к словам! :D Мы ваших университетов не кончали и таковым терминам не обучены (а то приглашу на клотик чай с кницами пить после тяжелого рабочего дня, да индигет почитать, слабо? :lol: ) Извиняюсь если не так чего обозвал там физический порядок - не физический беспорядок. Я считаю, что главное - суть. Суть вопроса vg ясна и решается предложенным образом (проверено на практике) в случае Oracl-а это rowid, а в случае Access-а SELECT TOP ... ORDER BY (R.T.F.M.), что-то еще другое есть у MySQL - не помню, но тоже отличается (кажется кто-то этот пример уже приводил). Другие БД не знаю, скажу честно. :evil:
Последний раз редактировалось Seaman 21 фев 2005, 12:06, всего редактировалось 1 раз.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

Yury писал(а):
папа Карло писал(а):для постраницчного просмотра данных существует мильен способов.

1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
а в эти таблицы они не запросом попадают?
в первую запросом, во вторую просто дописывание происходит при вставке новых записей....
Аватара пользователя
Seaman
Пользователь
Сообщения: 197
Зарегистрирован: 21 фев 2003, 13:26
Откуда: Ессентуки-Нврск-СПб-Торонто

Сообщение Seaman »

Yury писал(а): btw, твой запрос возвращает записи с 2 по 6 :wink:
Вообще-то с 6-й по 10-ю включительно :nope:
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

перечитал вопрос.... "Предпологается МССКЛ Сервер".... приведена таблица без никаких индексов. требуется выдать с 5ой по 10ую записей в физическом ордере (ибо хочет 11 и 20).... задача не имеет решения.
Аватара пользователя
Yury
The L'ony
Сообщения: 26202
Зарегистрирован: 22 янв 2004, 13:48
Откуда: Мирный -> Vancouver
Контактная информация:

Сообщение Yury »

Seaman писал(а):
Yury писал(а): btw, твой запрос возвращает записи с 2 по 6 :wink:
Вообще-то с 6-й по 10-ю включительно :nope:
table:
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 раз.
Ответить