Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Разминка для мозгов

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Astaroth



Зарегистрирован: 17.05.2004
Сообщения: 453
Откуда: Питер

СообщениеДобавлено: Пт Май 28 2004 09:52    Заголовок сообщения: Разминка для мозгов Ответить с цитатой

Друг тут подкинул задачку, как я понял из разряда теоретических. Ну, вроде "как обменять переменные значениями без помощи третьей переменной?" Задачка такова:
есть в базе данных табличка, на ней висит примари кей. Количество и тип столбцов не указаны. Как при помощи стандартного SQL пронумеровать строки одним select'ом? Сиквенции и прочие приблуды SQL Plus не предлагать. Решение должно быть при помощи стандартных функций - count, min, max и т.д..
Интересно до жути как такое сделать, а самому не додуматься Sad
_________________
Не очеловечивайте компы - они этого не любят!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Пт Май 28 2004 12:02    Заголовок сообщения: Ответить с цитатой

Курсоры пользовать можно?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Astaroth



Зарегистрирован: 17.05.2004
Сообщения: 453
Откуда: Питер

СообщениеДобавлено: Пт Май 28 2004 12:04    Заголовок сообщения: Ответить с цитатой

Не-а. Ничего низя - только стандартные ф-ции типа указанных выше.
ЗЫ Этот гад как задал задачку, так все никак и не расколется Sad Но божиться что решение есть.
_________________
Не очеловечивайте компы - они этого не любят!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Пт Май 28 2004 12:28    Заголовок сообщения: Ответить с цитатой

Цитата:

Не-а. Ничего низя - только стандартные ф-ции типа указанных выше.


т.е. Пронумеровать строки используя только select и стандартные агрегатные функции.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Astaroth



Зарегистрирован: 17.05.2004
Сообщения: 453
Откуда: Питер

СообщениеДобавлено: Пт Май 28 2004 12:37    Заголовок сообщения: Ответить с цитатой

cerber писал(а):
Цитата:

Не-а. Ничего низя - только стандартные ф-ции типа указанных выше.


т.е. Пронумеровать строки используя только select и стандартные агрегатные функции.


Именно так.
_________________
Не очеловечивайте компы - они этого не любят!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






СообщениеДобавлено: Пн Май 31 2004 18:06    Заголовок сообщения: Ответить с цитатой

А что значит "пронумеровать строки одним select'ом" ?
получить что то вроде этого?
1 key_value field1_value field2_value ....
2 key_value field1_value field2_value ....
3 key_value field1_value field2_value ....

тогда такой вариант...

Код:
select rowid, t.* from table t;
Smile

или я совсем не туда? Smile
Вернуться к началу
Гость






СообщениеДобавлено: Пн Май 31 2004 18:08    Заголовок сообщения: Ответить с цитатой

спутал...

Код:
SELECT ROWNUM, t.* FROM table t;
Вернуться к началу
wildwind



Зарегистрирован: 03.02.2004
Сообщения: 268
Откуда: Москва

СообщениеДобавлено: Вт Июн 01 2004 00:36    Заголовок сообщения: Re: Разминка для мозгов Ответить с цитатой

1. У нас все-таки Oracle или ANSI SQL?

2.
Astaroth писал(а):
есть в базе данных табличка, на ней висит примари кей.
Это значит, что строки уже пронумерованы!
Или primary key не числовой (тогда какой)?

3. Чем надо пронумеровать? Последовательными целыми числами или любыми уникальными?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Astaroth



Зарегистрирован: 17.05.2004
Сообщения: 453
Откуда: Питер

СообщениеДобавлено: Вт Июн 01 2004 09:07    Заголовок сообщения: Ответить с цитатой

У нас "чистый" SQL - т.е. все что придумал Oracle и иже с ним не пойдет. Стандарт SQL92, а rownum в нем нету насколько я помню.
Первичный ключ на табличке висит, но какой - Х его З, может и не числовой.
А пронумеровать строки надо по порядку - 1,2,3,4,..., n
_________________
Не очеловечивайте компы - они этого не любят!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Demiurge



Зарегистрирован: 05.04.2004
Сообщения: 33
Откуда: Казахстан, Астана

СообщениеДобавлено: Вт Июн 01 2004 13:14    Заголовок сообщения: Ответить с цитатой

А что, тут сложного - обычный коррелированный подзапрос,

Создаем исходные данные:

create table t (f number (5))
/

begin
for cnt in 1001..1020 loop
insert into t (f) values (cnt*2);
end loop;
end;
/

commit
/

Выборка

select f, (select count(f) cf from t where f <= a.f) num from t a;
_________________
С наилучшими пожеланиями
Demiurge
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Прохожий
Гость





СообщениеДобавлено: Вт Июн 01 2004 13:16    Заголовок сообщения: Простой sql Ответить с цитатой

Пусть есть таблица tmp
и в ней primary key - n,
тогда
SELECT t.n ,
(SELECT COUNT(*) FROM tmp t2 WHERE t2.n <= t.n ) AS rownumber
FROM tmp t
ORDER BY t.n;
Вернуться к началу
Astaroth



Зарегистрирован: 17.05.2004
Сообщения: 453
Откуда: Питер

СообщениеДобавлено: Вт Июн 01 2004 13:23    Заголовок сообщения: Ответить с цитатой

Угу... А если табличка уже есть, а не создается заново? И о табличке мы знаем только то, что на ней pk висит?
И о pk мы знаем только то, что он есть, а он и текстовым может быть...
_________________
Не очеловечивайте компы - они этого не любят!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Прохожий
Гость





СообщениеДобавлено: Вт Июн 01 2004 13:26    Заголовок сообщения: --- Ответить с цитатой

Для сравнения по <= все равно
что текст, что цифирь , однако ...
Вернуться к началу
Demiurge



Зарегистрирован: 05.04.2004
Сообщения: 33
Откуда: Казахстан, Астана

СообщениеДобавлено: Вт Июн 01 2004 13:34    Заголовок сообщения: Ответить с цитатой

А в чем проблема Sad , если это первичный ключ, то по определению на него уже создан индекс, по которому работает отношение порядка, а там пусть он будет хоть текстовым, это не имеет значения. и до остальных полей дела нет - в запросе они не используются

При желании проверь сам на какой-нибудь уже существующей таблице, разницы нет, будет работать
_________________
С наилучшими пожеланиями
Demiurge
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
wildwind



Зарегистрирован: 03.02.2004
Сообщения: 268
Откуда: Москва

СообщениеДобавлено: Вт Июн 01 2004 14:13    Заголовок сообщения: Ответить с цитатой

Demiurge
Оно самое. Idea
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Astaroth



Зарегистрирован: 17.05.2004
Сообщения: 453
Откуда: Питер

СообщениеДобавлено: Вт Июн 01 2004 14:26    Заголовок сообщения: Ответить с цитатой

Осталось найти подходящую таблицу... Но проверю обязательно!
_________________
Не очеловечивайте компы - они этого не любят!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Demiurge



Зарегистрирован: 05.04.2004
Сообщения: 33
Откуда: Казахстан, Астана

СообщениеДобавлено: Вт Июн 01 2004 17:34    Заголовок сообщения: Ответить с цитатой

Используй любую, у которой есть primary key Very Happy
_________________
С наилучшими пожеланиями
Demiurge
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Ср Июн 02 2004 07:49    Заголовок сообщения: Ответить с цитатой

Так UPDATE'том не проще будет? Confused
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...