Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
18.12.2001, 06:43
|
|||
---|---|---|---|
|
|||
Нумерация записей |
|||
#18+
Есть запрос SELECT id, name FROM t ORDER BY id Необходимо перенумеровать результаты этого запроса. Помогите, пож-та! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.12.2001, 07:23
|
|||
---|---|---|---|
|
|||
Нумерация записей |
|||
#18+
Если ID - это действительно ID (то есть на него создан уникальный констрэинт и соответственно индекс), то должно работать такое: SELECT id, name, ROWNUM AS ROW_NUMBER FROM t WHERE id>0 (id>0 - указывает оптимизатороу использовать индекс на id; 0 выбрать или другое число, зависит отданных. Я всегда использую для ключа положительные целые числа большие нуля). Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.12.2001, 07:43
|
|||
---|---|---|---|
|
|||
Нумерация записей |
|||
#18+
А если усложнить запрос SELECT id, name, parent_id FROM t WHERE parent_id = 1 ORDER BY id , то как перенумеровать записи? Предложенный метод не проходит, т.к. будет использоваться индекс на parent_id. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.12.2001, 09:06
|
|||
---|---|---|---|
|
|||
Нумерация записей |
|||
#18+
Ну если в лоб, то напрашиваеться решение создать групповой (или конкатенационный) индекс: 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 Это должно работать (во всяком случае на оракле версии выше Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.12.2001, 10:23
|
|||
---|---|---|---|
|
|||
Нумерация записей |
|||
#18+
или вот еще (не совсем ваш пример но тем не менее): 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) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.12.2001, 10:43
|
|||
---|---|---|---|
|
|||
Нумерация записей |
|||
#18+
ORDER BY во вложенном запросе у меня не работает. Если бы работал, не было бы проблем... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1993464]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 395ms |
0 / 0 |