Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нумерация записей / 7 сообщений из 7, страница 1 из 1
18.12.2001, 06:43
    #32019159
ASDS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
Есть запрос

SELECT id, name
FROM t
ORDER BY id

Необходимо перенумеровать результаты этого запроса. Помогите, пож-та!
...
Рейтинг: 0 / 0
18.12.2001, 07:23
    #32019160
ThyNibelungenhord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
Если ID - это действительно ID (то есть на него создан уникальный констрэинт и соответственно индекс), то должно работать такое:

SELECT id, name, ROWNUM AS ROW_NUMBER
FROM t WHERE id>0

(id>0 - указывает оптимизатороу использовать индекс на id; 0 выбрать или другое число, зависит отданных. Я всегда использую для ключа положительные целые числа большие нуля).

Удачи.
...
Рейтинг: 0 / 0
18.12.2001, 07:43
    #32019164
ASDS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
А если усложнить запрос

SELECT id, name, parent_id
FROM t
WHERE parent_id = 1
ORDER BY id

, то как перенумеровать записи? Предложенный метод не проходит, т.к. будет использоваться индекс на parent_id.
...
Рейтинг: 0 / 0
18.12.2001, 09:06
    #32019181
ThyNibelungenhord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
Ну если в лоб, то напрашиваеться решение создать групповой (или конкатенационный) индекс:

CREATE INDEX my_index1 on t
(
parent_id ASC,
id ASC -- обратите здесь внимание: здешнее ASC/DESC должно соответствовать порядку
-- сортировки в ORDER BY id, а здесь так же ASC
);

А далее запрос:
SELECT
/*+ INDEX (my_index1 t) */
/*
пропишем хинтик, а иначе скорее всего не сработает, так как оптимизатор очень любит пользовать индексы праймари кия посмотрите в мануале точный синтаксис здесь, так как не помню как правильно звучит конструкция: или INDEX (имя_индекса имя_таблицы) или наоборот INDEX (имя_таблицы имя_индекса)
*/
id, name, parent_id, ROWNUM AS ROW_NUMBER
FROM t
WHERE parent_id = 1 AND id>0

Это должно работать (во всяком случае на оракле версии выше
Удачи!
...
Рейтинг: 0 / 0
18.12.2001, 10:23
    #32019194
ThyNibelungenhord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
или вот еще (не совсем ваш пример но тем не менее):
SQL> select * from table_x1;

ID STRING DUMMY1
--------- ---------- ---------
10 rollback 10
11 commit 10
12 alter 10
13 user 10
14 drop 10

SQL> SELECT
2 ROWNUM,
3 id,
4 string,
5 dummy1
6 from (select id, string, dummy1 from table_x1
7 ORDER BY String);

ROWNUM ID STRING DUMMY1
--------- --------- ---------- ---------
1 12 alter 10
2 11 commit 10
3 14 drop 10
4 10 rollback 10
5 13 user 10

То только здесь ORDER BY во вложенном запросе - что не всегда есть гуд и где-то работать не будет. (Сам пробовал - нельзя объявить курсор со вложенным ордером в PL/SQL процедуре, во всяком случае на ORACLE 8.1.5)
...
Рейтинг: 0 / 0
18.12.2001, 10:43
    #32019198
ASDS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
ORDER BY во вложенном запросе у меня не работает. Если бы работал, не было бы проблем...
...
Рейтинг: 0 / 0
21.12.2001, 10:28
    #32019543
Crudus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация записей
Да, ORDER BY вообще не должен бы работать во вложенном запросе, но он почему то работает в диалоговом SQL и не работает в PL/SQL.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нумерация записей / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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