сквозная нумерация

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Pol777
Сообщения: 6
Зарегистрирован: 13 июн 2006, 09:49

сквозная нумерация

Сообщение Pol777 » 13 июн 2006, 10:01

Привет всем!

Подскажите как в запросе сделать сквозную нумерацию строк (наподобие rowid в oracle)?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 13 июн 2006, 10:22

на sql.ru это дело обсасывалось мильён раз, посмотри там, лениво снова разжевывать.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 июн 2006, 10:25

нумеровать на клиенте. порядок записей на выходе запроса зависит только от ORDER BY, и ни от чего другого.

Pol777
Сообщения: 6
Зарегистрирован: 13 июн 2006, 09:49

Сообщение Pol777 » 13 июн 2006, 10:51

kdv писал(а):нумеровать на клиенте. порядок записей на выходе запроса зависит только от ORDER BY, и ни от чего другого.
Вы говорите об УПОРЯДОЧИВАНИИ данных, а я бы хотел прикрутить сквозную нумерацию.
Это чтобы у каждой записи был свой порядковый номер (1,2,3,4,5 и т.д.)

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 13 июн 2006, 10:56

Это про первичный ключ энд генератор такой витееватый вопрос?

Pol777
Сообщения: 6
Зарегистрирован: 13 июн 2006, 09:49

Сообщение Pol777 » 13 июн 2006, 11:02

Ivan_Pisarevsky писал(а):Это про первичный ключ энд генератор такой витееватый вопрос?
Это уж как Вам угодно.
Задача тривиальная - пронумеровать записи. Только сделать желательно это средствами sql или самого Firebird-а.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 июн 2006, 11:17

Это чтобы у каждой записи был свой порядковый номер (1,2,3,4,5 и т.д.)
читать книги по проектированию БД, в частности про первичный ключ.
Насчет "сквозной нумерации" думать про многопользовательскую работу.

Pol777
Сообщения: 6
Зарегистрирован: 13 июн 2006, 09:49

Сообщение Pol777 » 13 июн 2006, 12:04

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 13 июн 2006, 12:21

ответ по сути - средствами FB это сделать можно только через селективную процедуру. Одним запросом - никак. Аналога ROW_NUMBER нет.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 13 июн 2006, 12:21

Pol777 писал(а):
Ivan_Pisarevsky писал(а):Это про первичный ключ энд генератор такой витееватый вопрос?
Это уж как Вам угодно.
Задача тривиальная - пронумеровать записи. Только сделать желательно это средствами sql или самого Firebird-а.
В файрберде все средства есть, отправлятесь почитать статьи на www.ibase.ru поиск по контексту "primary key" и "generator".

Если же задача отдать на клиента пронумерованый список, то почитайте топик на www.sql.ru поиском должен находиться.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 июн 2006, 12:33

если я не собираюсь эту нумерацию сохранять в таблице.
тогда надо нумеровать на клиенте. Причем, если речь идет об отчете, то так нумеровать умеет любой "отчетник".
Также я не совсем понимаю зачем Вы мне все время говорите про первичный ключ.
какой вопрос, такой и ответ. Из вопроса неясно, зачем нумеровать записи, причем использовать "сквозную нумерацию". Сквозная нумерация это вообще то непрерывная последовательность номеров, чаще ХРАНИМАЯ. Например, номера счетов-фактур.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 13 июн 2006, 12:37


Pol777
Сообщения: 6
Зарегистрирован: 13 июн 2006, 09:49

Сообщение Pol777 » 13 июн 2006, 12:40

Ivan_Pisarevsky писал(а):В файрберде все средства есть, отправлятесь почитать статьи на www.ibase.ru поиск по контексту "primary key" и "generator".
Да не нужен мне не "primary key" не "generator"! Как вы понять не можете? Если изменить сортировку на обратную, что у Вас primary key поменяется? А в моем случае нумерация не должна поменяться!
Если же задача отдать на клиента пронумерованый список, то почитайте топик на www.sql.ru поиском должен находиться.
Вы вот только и можете что советовать "куда пойти подальше"!
Искал я там и не раз.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 13 июн 2006, 12:43

>Как вы понять не можете?
Честное пионерское, пытаюсь, но не выходит... :?

>Вы вот только и можете что советовать "куда пойти подальше"!
Вполне осязаемая ссылка постом выше ничего не дала???

Pol777
Сообщения: 6
Зарегистрирован: 13 июн 2006, 09:49

Сообщение Pol777 » 13 июн 2006, 12:44

Ivan_Pisarevsky писал(а):>
>Вы вот только и можете что советовать "куда пойти подальше"!
Вполне осязаемая ссылка постом выше ничего не дала???
Извиняйте, вспылил!
Спасибо. Почитаю.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 15 июн 2006, 12:21

Самое простые решения - процедура или на клиенте.
Но задачка вполне решаема одним только селектом (без генератора и дополнительных ухищрений типа rdb$db_key) ;)
Причём, решаема даже для таблиц без первичного ключа и без уникальных полей. Хотя в этом случае запрос будет меняться для каждой сортировки.

Ответить